Java 关于双链表

Java 关于双链表,java,list,linked-list,Java,List,Linked List,我想知道“头”和“尾”是否像其他节点一样存储任何值?? 感谢头节点引用了下一个节点,而空引用了前一个节点。 尾部节点引用上一个节点,空引用下一个节点 头部和尾部节点应与任何其他节点相同。唯一的区别是,head没有对前一个节点的引用,tail没有对下一个节点的引用 除非,否则您的实现是一个循环链接列表,其中head引用tail作为前一个节点,而tail引用head作为下一个节点。双链接列表是一种专门的数据结构 如果将双链接列表视为一个图形,则可以看到每个节点都有数据,即使它只有一个连接。在双链接列

我想知道“头”和“尾”是否像其他节点一样存储任何值??
感谢

头节点引用了下一个节点,而空引用了前一个节点。
尾部节点引用上一个节点,空引用下一个节点


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


除非,否则您的实现是一个循环链接列表,其中
head
引用
tail
作为前一个节点,而
tail
引用
head
作为下一个节点。

双链接列表是一种专门的数据结构

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


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

取决于链表的具体实现。这两种方法都可以使用,但是使用额外的“head/tail”元素可以极大地简化许多操作的实现,比如insert/remove(因为您可以始终确保存在下一个/上一个元素,从而节省大量条件代码来处理列表的开始/结束)

既然您将问题标记为Java,我建议您查看Java.util.LinkedList的JDK源代码。您会发现,在这个特定的实现中,head和tail并不是指元素

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


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

正如Scot在上面所说的,双链接列表的结构显示在那里。 我认为这是维基百科的图像

请参考这个链接,你一定会得到它的想法

头部和尾部应与列表中的所有其他节点相同。 但与循环D.链表有一点不同,这个特性并没有处理它们

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

-1。如果上一个和下一个引用都设置为null,那么如何从head或tail进行遍历?从上面看,为什么您认为上一个和下一个引用都设置为null?head节点是只有ref-to-next的起始节点。就像wise tail只引用了它的上一个节点一样。好吧,我意识到(在重读之后)你写的并不是你的意思。我将其读取为ref to next node,ref to prev node设置为null。我取消了我的反对票,但也许你应该稍微修改一下你的措辞,以消除误解的可能性。这仍然是错误的。head和tail节点确实存储值(假设列表不是空的)。@nick,我已经修改了措辞。希望它更容易理解@弗拉申,这是真的;图中的头部节点存储12,尾部节点存储37。此外,对于空列表,假设列表是以传统方式实现的,则没有头节点或尾节点(它们是
null
)。特别是,弹出第一个和最后一个元素要简单得多,并且具有更可用的客户端api