在恒定时间O(1)中插入/删除双向链表

时间:2012-09-13 05:47:13

标签: list constants

a)我在stackoverflow中已经看到了很多关于这个问题的例子,但我仍然遇到问题,当它调用函数如insertAfter(Node n,Object o)时,它仍然知道它是如何知道它所引用的节点。如果我们说在节点2之后插入,那么链表如何知道哪个节点是节点2?

b)在stackoverflow的前一篇文章中,据说有一个指向要在之后或之前插入的节点的指针,这就是我们获得常量时间操作的原因。这是否意味着,就像我们必须在链表中头尾,我们还有一个指向每个节点的指针?

非常感谢帮助理解这一点。

1 个答案:

答案 0 :(得分:2)

如果使用键完成删除,那么您的点是有效的,因为我们不知道要删除的元素的位置,因此在列表中查找键使其时间在队列的长度上呈线性。但是在写入的地方是恒定时间是按地址删除。因此,可以始终移动到该地址并在恒定时间内删除该节点。

注意:单链表无法做到这一点。