繁体   English   中英

链表-附加节点:循环还是指针?

[英]Linked List - Appending node: loop or pointer?

我正在编写一个链表数据类型,因此,我目前拥有引用第一项的标准头指针,然后是每个元素的下一个指针,该指针指向下一个,从而最终元素的next = NULL。

我只是很好奇跟踪最后一个节点的利弊。 我可以有一个“尾巴”指针,该指针始终指向最后一个节点,以使其易于添加,也可以从头指针开始遍历列表,以在要添加时找到最后一个节点。 哪种方法更好?

存放尾巴通常是个好主意。 如果我们考虑在末尾添加项目的复杂性(如果您通常这样做的话),那么搜索尾巴的时间将为O(n),如果存储尾部的时间将为O(1)。

您可以考虑的另一种选择是使列表双向链接。 这样,当您要删除列表的末尾时,可以通过存储尾部来在O(1)时间内删除节点。 但是,这将导致需要为列表中的每个元素存储一个额外的指针(虽然不昂贵,但它会累加,因此对于内存受限的系统应予以考虑)。

最后,这一切都与您需要执行的操作有关。 如果您从不从列表末尾添加或删除或操作,则没有理由这样做。 我建议分析您最常见的操作的复杂性,并据此做出决定。

取决于您需要找到最后一个节点的频率,但是通常最好有一个tail指针。

仅保留和更新tail指针几乎没有成本,但是您必须记住要对其进行更新! 如果你能保持更新,那么就会使追加操作( 更快的 O(1)而不是O(n) 因此,如果通常将元素添加到列表的末尾,则应绝对创建并维护tail指针。

如果您有一个双向链表,其中每个元素都包含一个指向next prev元素的指针,那么tail指针几乎是通用的。

另一方面,如果这是一个有序列表,那么您将不会追加到末尾,因此将永远不会使用tail指针。 尽管如此,保持指针不变是一个好主意,以防万一您将来决定需要它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM