gpt4 book ai didi

C - 链表

转载 作者:太空宇宙 更新时间:2023-11-04 06:02:15 29 4
gpt4 key购买 nike

我正在尝试理解链表的代码。我明白他们是如何工作的。我正在查看一些与动态内存和链表有关的代码,我在此处对其进行了简化:

 #include <stdio.h>
#include <stdlib.h>

typedef struct node {
char *word;
struct node *next;
} node;

void display_word(node *start) {
node *start_node = start;
puts("");
for(; start_node != NULL; start_node = start_node->next) {
printf("%s", start_node->word);
}
}

node* create_node(char *input) {
node *n = malloc(sizeof(node));;
n->word = strdup(input);
n->next = NULL;
return n;
}

int main() {
node *start_node = NULL;
node *n = NULL;
node *next_node = NULL;
char word_holder[20];
for(; fgets(word_holder,80,stdin) != NULL; n = next_node) {
next_node = create_node(word_holder);
if(start_node == NULL)
start_node = next_node;
if(n != NULL)
n->next = next_node;
}
display_word(start);
}

所以程序为用户输入的每个单词创建了一个链表,然后将其打印出来。我不明白的是在 main() 函数中 next_node 每次都分配给一个新节点以创建一个新节点,但是 start_node 指向 next_node,所以它会指向 next_node 每次创建的每个新节点?那么怎么可能仍然保留列表呢?我们不应该每次都丢失旧节点吗?

谁能解释一下。

最佳答案

  1. 创建第一个节点时,指向它的指针将保存在 start 中。

  2. 当创建后续节点时,它们被添加到列表的末尾,所以start仍然指向第一个节点,并通过它,列表的其余部分。

使用调试器单步调试代码,或者拿出铅笔和纸,画出您在大脑中单步调试时发生的情况,您将看到它们是如何组合在一起的。

关于C - 链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198483/

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