2015-11-19 50 views
2

为什么当我们试图建立一个单独的链表时,我们在课堂上做出Head NULL,而不是将Head的Head设为Null。在关于链表的函数中,为什么我们将节点的下一个为空并且不使节点为空?为什么我们在单链表中使头部变为空?

+0

你的问题不太清楚。请解释一下。 –

+0

为什么我们让Head = Null而不是Head-> next = Null? –

+0

这样你就可以通过检查'head == null'来检查列表是否为空。如果已经有头指向的第一个元素,则只能设置“head-> next = null”。 – m69

回答

0

为了避免浪费。列表节点被设计为在其中存储元素。想象一下,如果我们在建议的场景中有一个空列表,其中*表示列表的头部。我们将从以下开始:

[*???]->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倍,除非它到这恰好是空的头,响应删除尾巴。

相关问题