在我的演讲中,如果双重链表是空的话那么
header.next==tail;
或者
tail.prev==header;
但是我觉得只有两个节点就是这种情况。不应该是空的情况
head==null
。
我不知道我是否正确。我对这个主题很新。可以请某人澄清一下
答案 0 :(得分:2)
这个双重链接列表使用头部和尾部sentinel nodes。这些节点实际上并不包含列表的元素,但是通过使头部和尾部的工作更像列表的中间部分,有助于使某些算法更好一些。
如果列表没有使用标记,那么空案例将为head==null
,而双元素案例将为header.next==tail
和tail.prev==header
。
答案 1 :(得分:2)
存储双链表有两种常用方法:
让head
和tail
引用树中的实际节点。
head variable tail variable
| |
V V
first -> second -> third -> null
在这种情况下,您是正确的 - head
将是null
。
让head
和tail
成为特殊节点(在另一个答案中指出,称为"sentinel nodes"),它们实际上不包含任何数据并指向第一个列表中的最后一个节点分别通过next
和prev
。
head variable tail variable
| |
V V
head -> first -> second -> third -> tail -> null
node node
在这种情况下,header.next == tail
表示该列表为空。
可以使用这种方法而不是上述方法来简化实现并使代码更快一些 - 不需要为删除或插入第一个或最后一个节点做出特殊规定。