为什么链表删除和插入操作的复杂度为 O(1)?它不应该是O(n)的吗?
据说LinkedList删除和添加操作的复杂性是。如果是.cO(1)
ArrayList
O(n)
计算大小为“M”的ArrayList:如果我想删除第N个位置的元素,那么我可以一次性使用索引直接转到第N个位置(我不必遍历到第N个索引),然后我可以删除元素,直到此时,复杂性为O(1),然后我将不得不移动其余元素(M-N移位),所以我的复杂性将是线性的,即O(M-N +因此,最后删除或插入将给我最好的表现(如N~M),而删除或插入开始时将是最差的(如N~1)。
现在,大小为“M”的LisnkedList:由于我们无法直接到达LinkedList中的第N个元素,因此要访问第N个元素,我们必须遍历N个元素,因此LinkedList中的搜索成本高于ArrayList...但是在LinkedList的情况下,删除和添加操作被称为O(1),因为在LinkedList中不涉及Shift,但是涉及遍历操作?因此,复杂性应为 O(n) 阶,其中最差性能位于尾节点,最佳性能位于头节点。
任何人都可以解释一下,为什么我们在计算LinkedList删除操作的复杂性时不考虑遍历成本?
所以我想了解它在java.util包中是如何工作的。如果我想在C或C++我如何实现O(1)在LinkedList中随机删除和插入?