我在阅读关于链表的内容。我发现:从链表中删除一个特定元素需要O(n)的时间,其中n是链表中元素的数量。
http://www.cs.mcgill.ca/~dprecup/courses/IntroCS/Exams/comp250-final-2006-solutions.pdf
但在这个网页上,我发现从链表中删除一个元素的时间复杂度为: O(1)。
http://bigocheatsheet.com/
以上哪一种大O符号是链表删除操作的正确时间复杂度呢?
谢谢!
谢谢!
需要找到要删除的元素。这种查找相对较慢,因为在最坏的情况下,必须遍历整个列表才能找到该项。删除本身很便宜。因此,查找是O(n),删除是O(1)。这只是一个理论问题吗?
remove(O)
是什么?LinkedList()
有 remove()
, remove(Object)
和 remove(int)
。无参的 remove()
移除第一个元素,我期望它的时间复杂度是 O(1)。另外两个方法的时间复杂度应该是 O(n),因为如你所说,要移除的元素还没有被找到。 - Ole V.V.remove(0)
是在移除列表的第一个元素。 "无参 remove 移除第一个元素,我希望它是 O(1)" - 并且在上面的表格中 LinkedList 的行是 O(1)
。 "另外两个应该是 O(n)" - 并且它们是 O(n)
。 "因为,正如你所说,要删除的元素尚未找到。" - 不正确,在 ArrayList
中需要移动所有元素,而在 CopyOnWriteArrayList
中需要复制整个数组。 - Jaroslaw PawlakLinkedList
方法的实现,意思是LinkedList.remove(Object)
和LinkedList.remove(int)
都是O(n),所以我想我们完全同意。 - Ole V.V.