链表:我们如何判断虚拟节点的使用是否绝对必要?

发布于 2025-01-01 11:37:42 字数 1435 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小矜持 2025-01-08 11:37:42

不,没有任何算法在没有虚拟节点的情况下是不可能的,它只是为了方便并保持代码干净。如果没有虚拟变量,您必须特别考虑,例如在删除链表的最后一个节点或遍历空链表时 - 在这些情况下,虚拟变量充当哨兵,使遍历和删除的核心算法更加简单。

No, there are not any algorithms that are not possible without having a dummy node, it is just there for convenience and keeping the code clean. Without a dummy you have to take special consideration e.g. when deleting the last node of a linked list or traversing an empty linked list – in these cases the dummy acts as a sentinel that keeps the core algorithm for traversal and removal simpler.

凉栀 2025-01-08 11:37:42

拥有虚拟节点(在某些文本中称为哨兵)的优点是不再需要检查列表中的 null 元素,在某种程度上,它是 空对象模式,使得一些算法的实现更加简单。

除此之外,使用任一实现(有或没有虚拟节点)可以解决的算法不会有任何差异。例如,Oracle 的 LinkedList 类实现使用虚拟节点,但其他供应商可以自由编写该类的无虚拟版本,因为它的实现细节不会对外界产生任何影响。

The advantage of having a dummy node (called a sentinel in some texts) is that it's no longer necessary to check for null elements in the list, in a way, it's an instance of the Null Object pattern, making the implementation of some algorithms simpler.

Other than that, there won't be any difference in the algorithms that can be solved using either implementation (with or without a dummy node). For example, Oracle's implementation of the LinkedList class uses a dummy node, but other vendors are free to write a dummy-less version of the class, since it's an implementation detail that won't make any difference to the outside world.

一身仙ぐ女味 2025-01-08 11:37:42

如果没有某种明确标记列表末尾的方法,就不可能明确解释嵌套列表。请参阅: 为什么我们需要 `nil`?

当然,您可以检查是否节点通过保留指向它的指针来成为最终节点,但这在很大程度上没有吸引力,因为它效率低下。

Without some way of unambiguously marking the end of the list, it can be impossible to unambiguously interpret nested lists. See: Why do we need `nil`?

You could, of course check if a node is the final node by keeping a pointer to it, but that is unattractive in no small part because it is inefficient.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文