【问题标题】:why do we make head a null in singly linked list?为什么我们在单链表中将 head 设为空?
【发布时间】:2016-02-22 04:44:22
【问题描述】:

为什么当我们尝试创建一个单链表时,我们将类中的 Head 设为 NULL 而没有将 Head 的 Next 设为 Null 。在有关链表的函数中,为什么我们将节点的 Next 设为 Null 而不将 Node 设为 Null?

【问题讨论】:

  • 你的问题不太清楚。请解释一下。
  • 为什么我们让 Head=Null 而不是 Head->next=Null?
  • 这样就可以检查列表是否为空,通过检查是否head==null。如果已经有 head 指向的第一个元素,则只能设置 head->next=null
  • 根据定义,头部是列表中的第一个元素。没有元素的列表没有第一个元素。

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


【解决方案1】:

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

[*???]->NULL

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

*NULL

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

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

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

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

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

因此,这样做实际上并没有什么收获,而且可能会失去很多。

在关于链表的函数中,为什么我们要做 Next 的 节点为空而不使节点为空?

我不太明白这部分。例如,如果我们正在讨论向列表中插入一个新节点,我们可能会这样:

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

然后我们让它指向头部:

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

...然后将head指向新节点。

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

因此,通常不应该将节点的下一个指针设置为空,除非它指向恰好为空的头部,或者响应删除尾部。

【讨论】:

    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2021-07-26
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多