为什么当我们尝试创建一个单链表时,我们在类中使Head为NULL而不是将Head的Head作为Null。在关于链表的函数中,为什么我们要使节点的下一个Null并且不使Node Null?
答案 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,除非它是碰巧为空的头部,或者是为了删除尾部。