gpt4 book ai didi

c - 为什么这个链表无限期地打印最后一个元素?

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

我正在完成一项 Hackerrank 挑战,涉及向链表添加元素并打印它。

输入格式如下:一组整数,其中第一个元素给出大小,其余元素是列表的组成部分。

我用 Java 完成了挑战,但无法用 C 完成。输入 4 2 3 4 1 应该打印 2 3 4 1,但是我编码的这个片段给了我 1 1 1 1 1 1 .... {truncated}

我的方法:声明一个新的 Node 类型的 temp 结构(数据输入作为数据字段,下一个字段为 NULL),然后遍历链表以head为起点,到达最后一个元素时,将最后一个元素的next字段改为当前元素的地址。

代码:

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

typedef struct Node{
int data;
struct Node* next;
}Node;

Node* insert(Node *head,int data)
{
Node temp = {data, NULL} ;

if (head == NULL)
{ head =&temp;
return head;
}

else{

Node* current = head ;
while(current->next !=NULL)
current = current->next ;

current->next = &temp;

return head;
}
}

void display(Node *head)
{
Node *start=head;
while(start)
{
printf("%d ",start->data);
start=start->next;
}
}

int main()
{
int T,data;
scanf("%d",&T);
Node *head=NULL;
while(T-->0){
scanf("%d",&data);
head=insert(head,data);
}

display(head);

}

最佳答案

列表节点必须动态分配。这个

Node temp = {data, NULL} ;

声明一个局部变量。在其声明函数的范围之外引用其地址是未定义的行为

替换为

Node *temp = malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;

现在 temp 是一个指针,表达式 &temp 也必须替换为 temp

关于c - 为什么这个链表无限期地打印最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41849693/

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