2
为什么当我们试图建立一个单独的链表时,我们在课堂上做出Head NULL,而不是将Head的Head设为Null。在关于链表的函数中,为什么我们将节点的下一个为空并且不使节点为空?为什么我们在单链表中使头部变为空?
为什么当我们试图建立一个单独的链表时,我们在课堂上做出Head NULL,而不是将Head的Head设为Null。在关于链表的函数中,为什么我们将节点的下一个为空并且不使节点为空?为什么我们在单链表中使头部变为空?
为了避免浪费。列表节点被设计为在其中存储元素。想象一下,如果我们在建议的场景中有一个空列表,其中*
表示列表的头部。我们将从以下开始:
[*???]->NULL
其中???
只是一些未使用元素的虚拟变量。我们已经浪费了列表节点时,我们可以简单地这样做:
*NULL
同样,如果我们考察一个非空列表,我们可能会与你的情况:
[*123]->[456]->[789]->[???]->NULL
...当我们可以简单的有:
[*123]->[456]->[789]->NULL
你当然可以扩大此当列表大小从0到1重写这个虚拟变量,但现在提出涉及额外的分支,因此,我们最终得到更加复杂的我障碍和处理开销。
所以这样做确实很少,而且很可能会丢失很多东西。
在关于链表的函数中,为什么我们将 的下一个节点为空并且不使节点空?
我对此部分不甚了解。如果我们谈论的是插入一个新的节点列表,例如,我们可能有这样的:
[new node: 456]->??? [*123]->NULL
然后,我们让它指向头:
[new node: 456]->[*123]->NULL
...然后使头指向新节点。
[*456]->[123]->NULL
所以应该不是通常情况下,您是一个节点的next指针设置为NULL倍,除非它到这恰好是空的头,响应删除尾巴。
你的问题不太清楚。请解释一下。 –
为什么我们让Head = Null而不是Head-> next = Null? –
这样你就可以通过检查'head == null'来检查列表是否为空。如果已经有头指向的第一个元素,则只能设置“head-> next = null”。 – m69