Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从链表中删除元素的大O表示法_Java - Fatal编程技术网

Java 从链表中删除元素的大O表示法

Java 从链表中删除元素的大O表示法,java,Java,我在读关于链表的书。我发现:从链表中删除所需的元素需要O(n)个运行时间,其中n是 列表中的元素。 但在这个网页中,我发现从链表中删除一个元素是:O(1)。 上面哪个大O符号是从链表中删除的正确符号 谢谢必须找到要删除的元素。这个查找相当慢,因为在最坏的情况下,必须遍历整个列表才能找到该项。移除本身很便宜。所以发现是O(n),移除是O(1)。这只是一个理论问题吗?从链表中删除该项所需的时间取决于我们将如何准确地执行此操作。以下是一些可能性: 按值删除。在这种情况下,我们需要找到一个项(O(

我在读关于链表的书。我发现:从链表中删除所需的元素需要O(n)个运行时间,其中n是 列表中的元素。

但在这个网页中,我发现从链表中删除一个元素是:O(1)。

上面哪个大O符号是从链表中删除的正确符号


谢谢

必须找到要删除的元素。这个查找相当慢,因为在最坏的情况下,必须遍历整个列表才能找到该项。移除本身很便宜。所以发现是O(n),移除是O(1)。这只是一个理论问题吗?

从链表中删除该项所需的时间取决于我们将如何准确地执行此操作。以下是一些可能性:

  • 按值删除。在这种情况下,我们需要找到一个项(O(n))并将其移除(O(1))。总时间为O(n)
  • 按索引删除。在这种情况下,我们需要遍历列表(O(index))并删除项(O(1))。总时间为O(索引)。对于任意索引,它是O(n)
  • 通过引用包含项O(1)的链表节点删除
在Java中,使用
迭代器时会遇到最后一种情况。请删除
列表迭代器。删除
链表

  • O(n)表示得到
  • O(1)加入
  • O(n)表示容器
  • O(1)下一个
  • O(1)用于删除已找到的元素
  • 见下图:


    这取决于您是否必须搜索要删除的元素,或者是否已经有了对该元素的引用(例如,如果您在迭代列表时删除了当前元素)。删除本身就是O(1),考试答案(出于某种原因?)也包括对元素的搜索(即O(n))这意味着当我删除一个项目时,我必须搜索它O(n),然后删除它O(1),所以整个是O(n)+O(1)=O(n)。。。是这样吗?Thanks@senshinakamora是的,删除节点的时间复杂度为常数O(1),与列表中的节点数无关。但是,根据列表中的节点数(线性搜索),查找要开始的节点是O(n)。什么是
    remove(O)
    LinkedList()
    具有
    remove()
    remove(Object)
    remove(int)
    。no arg remove删除第一个元素,我希望它是O(1)。另外两个应该是O(n),因为正如您所说,要删除的元素尚未找到。@OleV.V<代码>删除(0)
    正在删除列表的第一个元素。“no arg remove删除第一个元素,我希望它是O(1)”-在上表的LinkedList行中,它是
    O(1)
    in。“另外两个应该是O(n)”-它们是
    O(n)
    。“因为,正如您所说,要删除的元素尚未找到。”-不正确,在
    ArrayList
    中,您需要移动所有元素,而在
    CopyOnWriteArrayList
    中,您必须复制整个数组。哦,这是数字零,不是大写字母。谢谢你的解释。我刚才说的是
    LinkedList
    方法的实现,意思是
    LinkedList.remove(Object)
    LinkedList.remove(int)
    都是O(n),所以我想我们完全同意。