双重链表清空情况

时间:2014-05-16 00:48:16

标签: java data-structures doubly-linked-list

在我的演讲中,如果双重链表是空的话那么

header.next==tail;

或者

tail.prev==header; 

但是我觉得只有两个节点就是这种情况。不应该是空的情况 head==null
我不知道我是否正确。我对这个主题很新。可以请某人澄清一下

2 个答案:

答案 0 :(得分:2)

这个双重链接列表使用头部和尾部sentinel nodes。这些节点实际上并不包含列表的元素,但是通过使头部和尾部的工作更像列表的中间部分,有助于使某些算法更好一些。

如果列表没有使用标记,那么空案例将为head==null,而双元素案例将为header.next==tailtail.prev==header

答案 1 :(得分:2)

存储双链表有两种常用方法:

  • headtail引用树中的实际节点。

    head variable       tail variable
      |                   |
      V                   V
    first -> second -> third -> null
    

    在这种情况下,您是正确的 - head将是null

  • headtail成为特殊节点(在另一个答案中指出,称为"sentinel nodes"),它们实际上不包含任何数据并指向第一个列表中的最后一个节点分别通过nextprev

    head variable                       tail variable
      |                                   |
      V                                   V
    head -> first -> second -> third -> tail -> null
    node                                node
    

    在这种情况下,header.next == tail表示该列表为空。

    可以使用这种方法而不是上述方法来简化实现并使代码更快一些 - 不需要为删除或插入第一个或最后一个节点做出特殊规定。