如何在不使用尾部指针的情况下实现双向链表

问题描述 投票:0回答:2

是否有必要在双向链表中使用尾指针?如何在没有尾指针的情况下实现双向链表插入,如果这样做的话,时间会很复杂。

go data-structures linked-list doubly-linked-list
2个回答
1
投票

不,没有必要。以下是不使用tail指针的双向链接列表的时间复杂度。

正在列表中: O(1)

(head newNode x)

在列表中的两个节点之间插入:O(n)

(head x newNode y)

附加到列表:O(n)

(head x y newNode)

Note:使用双向链表的tail将使复杂度为O(1)


TL; DR:不,它的功能几乎相同,除了附加性能较低的O(n)。


0
投票

如果知道要插入的节点的前后,则复杂度为O(1)。您只能将上一个/下一个节点中的指针设置为指向新节点,而将新节点中的指针设置为上一个/下一个节点。如果插入到列表的开头,您还可以更新头指针。

如果在双向链接列表(或单链接列表)中没有尾部指针,并且没有对最后一个元素的引用,则追加到列表将变为O(n),因为您必须遍历查找最后一个元素的列表。

© www.soinside.com 2019 - 2024. All rights reserved.