【发布时间】:2014-05-16 00:48:15
【问题描述】:
在我的演讲中,如果双向链表为空,那么
header.next==tail;
或者
tail.prev==header;
但我觉得恰好有两个节点时就是这种情况。空壳不应该是
head==null.
我不知道我是否正确。我对这个主题还很陌生。有人可以澄清一下吗
【问题讨论】:
标签: java data-structures doubly-linked-list
在我的演讲中,如果双向链表为空,那么
header.next==tail;
或者
tail.prev==header;
但我觉得恰好有两个节点时就是这种情况。空壳不应该是
head==null.
我不知道我是否正确。我对这个主题还很陌生。有人可以澄清一下吗
【问题讨论】:
标签: java data-structures doubly-linked-list
有两种常用的方式来存储双链表:
让head 和tail 引用树中的实际节点。
head variable tail variable
| |
V V
first -> second -> third -> null
在这种情况下,您是正确的 - head 将是 null。
让head 和tail 成为特殊节点(称为"sentinel nodes",正如另一个答案中所指出的那样)实际上不包含任何数据并通过@987654329 指向列表中的第一个和最后一个节点分别是@和prev。
head variable tail variable
| |
V V
head -> first -> second -> third -> tail -> null
node node
在这种情况下,header.next == tail 表示列表为空。
人们可能会使用这种方法而不是上面的方法来稍微简化实现并使代码更快一些 - 无需为删除或插入第一个或最后一个节点做出特殊规定。
【讨论】:
head==null
head==null 的措辞表示一个空列表,但也可能是措辞错误。
这个双向链表同时使用了头部和尾部sentinel nodes。这些节点实际上并不包含列表的元素,但通过使头部和尾部情况更像列表的中间部分来帮助使某些算法稍微好一点。
如果列表不使用标记,则空大小写为head==null,二元素大小写为header.next==tail 和tail.prev==header。
【讨论】: