关于双重链表

时间:2010-05-30 07:45:00

标签: java list linked-list

我想知道“head”和“tail”存储任何值如同其他节点? 感谢

5 个答案:

答案 0 :(得分:4)

头节点具有对下一个节点的引用,以及对前一节点的空引用 尾节点具有对前一节点的引用,以及对下一个节点的空引用。

alt text

答案 1 :(得分:4)

取决于链表的具体实现。两种方式都可以工作,但有额外的“头/尾”元素大大简化了插入/删除等许多操作的实现(因为你总是可以确定会有下一个/前一个元素,节省了大量的条件代码处理列表的开头/结尾。)

由于您将问题标记为Java,我建议您查看java.util.LinkedList的JDK源代码。您将发现在此特定实现中,head和tail不引用元素。

如果你真的想要了解额外的头/尾节点的优势,如果你自己实现一个简单的双链表来直接体验插入/删除方法的复杂性差异,那么它可能是最有启发性的。

在允许指针算术的其他语言中,通常只有一个额外的头节点同时也作为尾节点。

答案 2 :(得分:2)

头部和尾部节点应与任何其他节点相同。唯一的区别是,head没有对前一个节点的引用,tail没有对下一个节点的引用。

除非您的实施是循环链接列表,其中head引用tail作为上一个节点,tail引用head作为下一个节点。

答案 3 :(得分:1)

双向链表是一种专门的graph数据结构。

如果您将双向链表视为图形,则会看到每个节点都有数据,即使它只有一个连接。在双向链表中,这是一个完整的图(其中存在从任何给定节点到任何其他给定节点的路径),内部节点包含两个引用(一个用于列表中的任一方向)和外部节点(head / tail)只包含一个引用(它是对你可能从该节点访问过的节点的引用)。

头部和尾部节点的特殊之处在于它们只有一个参考而不是两个。它们仍然是您所代表的图形数据结构的一部分。

答案 4 :(得分:0)

正如苏格兰人所说,那里显示了双重链接列表的结构。 我认为这是维基百科的形象。

请参阅此链接,您一定会对此有所了解。

http://richardbowles.tripod.com/cpp/linklist/doublist.htm

头部和尾部应与列表中的所有其他节点相同。 但是圆形D链接列表有点不同,这些功能并没有处理它们。

关于双链接列表,差异是head没有引用前一个节点+ tail没有引用下一个节点。 这是双链表的简单数据结构。