gpt4 book ai didi

c - 将节点附加到指针数组

转载 作者:行者123 更新时间:2023-11-30 21:06:02 25 4
gpt4 key购买 nike

我目前正在使用 C 语言学习数据结构,现在分配使用指针创建列表。然后,当我尝试将元素添加到创建的列表中时遇到问题。这是我现在的代码。

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

struct NODE
{
int x;
char c;
struct NODE *next;
};
void make_list(struct NODE **n)
{
for(int k = 0; k < 20; k++)
{
*n = (struct NODE *)malloc(sizeof(struct NODE));
(*n)->x = k+1;
(*n)->c = 'A'+k;
n = &(*n)->next;
}
*n = NULL;
}

void print_list(struct NODE *node)
{
int k = 0;
printf("###### Content of list ######\n");

while(node != NULL)
{
printf("[%d]:x = %d, c = %c\n", k++, node->x, node->c);
node = node->next;
}
}

void append_last_node(struct NODE *node)
{
struct NODE *next;

while(node->next != NULL)
{
node->next = next;
}

node->next = (struct NODE *)malloc(sizeof(struct NODE));

node->next->next = NULL;
node->next->x = 100;
node->next->c = 'a';
}

int main()
{
struct NODE *n;

make_list(&n);
print_list(n);

append_last_node(n);
print_list(n);

return 0;

一旦我运行这个,只打印我在make_list函数中创建的列表,而不会打印append_last_node函数,并且打印列表后执行过程不会自动结束。

###### Content of list ###### 
[0]:x = 1, c = A
[1]:x = 2, c = B
[2]:x = 3, c = C
[3]:x = 4, c = D
[4]:x = 5, c = E
[5]:x = 6, c = F
[6]:x = 7, c = G
[7]:x = 8, c = H
[8]:x = 9, c = I
[9]:x = 10, c = J
[10]:x = 11, c = K
[11]:x = 12, c = L
[12]:x = 13, c = M
[13]:x = 14, c = N
[14]:x = 15, c = O
[15]:x = 16, c = P
[16]:x = 17, c = Q
[17]:x = 18, c = R
[18]:x = 19, c = S
[19]:x = 20, c = T

我的append_last_node函数是否有任何错误或者我缺少什么东西?

P/S:抱歉我的英语不好。

最佳答案

让我们分析一下这段代码:

struct NODE *next;

while(node->next != NULL)
{
node->next = next;
}

首先声明一个指向NODE的指针,next,并且从未初始化。它指向内存的随机位置。一般来说,最好初始化所有内容。

node,作为参数传递,是列表的头部。

在第一次迭代时,node->next 是列表的第二个元素,显然不为 null,因为列表应该有 20 个元素。

对于这个元素,您可以分配 next,它是未初始化的。

未定义的行为如下。

此时node->next是一些随机地址,您的进程甚至可能无法访问该地址。 最后一个节点将被附加到此随机内存位置,否则崩溃。

您所追求的是循环直到列表的最后一个元素。因此:

struct NODE *curr = node;

while(curr->next != NULL)
{
curr= curr->next;
}

因此 curr 将是最后一个节点。

关于c - 将节点附加到指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944164/

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