gpt4 book ai didi

c - 了解添加到链接列表的前面

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:18 25 4
gpt4 key购买 nike

假设我有一个这样的列表:

[1]-> [2]-> [3]-> [4]-> [5]->NULL

其中值1为头部,5为尾部。我遵循此处显示的示例代码:https://codereview.stackexchange.com/questions/29784/reversing-a-linked-list-and-adding-removing-nodes

我不明白的是这一行(在addtoFront函数中)

ptr->value = input;
ptr->next = head; // Point next value to the previous head
head = ptr;

这是我得到的。 ptr->value = input

此行用给定值初始化称为指针的节点

`ptr->next = head;` 

这一行将新项目(要插入到前面)的下一个指针设置为前一个头部,所以我们有这样的东西:

将 [9] 插入到前面,所以:

[9] (new head points to old head)
[9] -> [1] (9's next pointer points to 1)

我没有得到的是这一行:

head = ptr; 

阅读这篇文章让我感到困惑,因为我将其解释为将两个节点设置为彼此相等,即 [1] 变为 [9] 所以我们有 2 个节点 [9],[9 ]->[9]->[2]->[3]->[4]->[5]->NULL

但显然不是这样。

一旦他们没有箭头符号 ->,我似乎就不知道到底发生了什么(对于目前的大多数功能)。任何帮助将不胜感激!

最佳答案

这里的问题是您是根据具体实例而不是实际指向内存位置的指针来考虑指针。

在您引用的问题中,head 是指向包含节点实例的内存位置的指针。

代码:
头 = ptr

正在更新 head 指向的内存位置,而 head 的原始位置现在包含在 ptr->next 中。

要获取head的实际节点值,需要解引用指针:

*head

例如,给定一个指向内存位置 8 的链表头,其中包含一个值为“a”的节点实例和一个新输入“b”:

在执行您指向的代码之前:

  1. 头== 8
  2. head->value == 'a'
  3. head->next = NULL;
  4. ptr == 12//这是我选择的任意内存位置,将从对 malloc 的调用中返回
  5. ptr->value == 'b'
  6. ptr->next = NULL;

一旦您突出显示的代码块被执行:

  1. 头 == 12
  2. head->value == 'b'
  3. head->next = 8;
  4. head->next->value == 'a'
  5. head->next->next == NULL;
  6. ptr == 12
  7. ptr->value == 'b'
  8. ptr->next = NULL;

关于c - 了解添加到链接列表的前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33698278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com