为什么我们在单链表中使头部为空?

时间:2015-11-19 20:48:23

标签: data-structures nodes singly-linked-list

为什么当我们尝试创建一个单链表时,我们在类中使Head为NULL而不是将Head的Head作为Null。在关于链表的函数中,为什么我们要使节点的下一个Null并且不使Node Null?

1 个答案:

答案 0 :(得分:0)

避免浪费。列表节点用于在其中存储元素。想象一下,如果我们在您建议的场景中有一个空列表,其中*表示列表的头部。我们将从:

开始
[*???]->NULL

其中???只是未使用元素的虚拟变量。当我们可以简单地执行此操作时,我们已经浪费了一个列表节点:

*NULL

同样,如果我们检查非空列表,我们可能会遇到您的情况:

[*123]->[456]->[789]->[???]->NULL

...当我们可以简单地拥有:

[*123]->[456]->[789]->NULL

当然,当列表大小从0变为1时,你可以扩充这个以覆盖这个虚拟变量,但现在这涉及额外的分支等等,我们最终得到更复杂的指令和处理开销。

所以这样做真的很少,而且可能还有很多东西要丢失。

  

在关于链表的功能中,我们为什么要做下一个   节点是否为Null而不是使Node Null?

我不太明白这一部分。例如,如果我们谈论将新节点插入列表,我们可能会这样:

[new node: 456]->???      [*123]->NULL

然后我们指向头部:

[new node: 456]->[*123]->NULL

...然后让头指向新节点。

[*456]->[123]->NULL

因此,通常不应该将节点的下一个指针设置为null,除非它是碰巧为空的头部,或者是为了删除尾部。