gpt4 book ai didi

c - 为什么带有双指针的链表会导致错误?

转载 作者:行者123 更新时间:2023-11-30 20:17:11 24 4
gpt4 key购买 nike

我问你一个问题是因为我正在做的作业没有完成。该结构体是一个普通的链表,在main中声明头指针,并将头指针的地址值作为参数传递给函数。全局变量top用于确定当前数据所在的位置。

当前下面的代码在执行时只会检测错误。

结构:

struct ListNode{
int data;
struct ListNode* link;
};
int top = 0;

代码:

void DisplayList(ListNode** head){
if(*head == NULL){
printf("List = Empty\n");
}
else{
printf("List = ");
for(;(*head) != NULL; *head = (*head)->link){
printf("%d ",(*head)->data);
}
}
printf("\n");
}

void AddList(ListNode** head){
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
int num;
printf("Data register) ");
scanf("%d",&num);
temp->data = num;
temp->link = NULL;
top++;

if(*head == NULL){
*head = temp;
}
else{
for(;(*head)->link != NULL; *head = (*head)->link){}
(*head)->link = temp;
}
DisplayList(head);
}

预期结果:

数据寄存器)10列表 = 10

数据寄存器)20列表 = 10 20

数据寄存器)30列表 = 10 20 30

<小时/>

最佳答案

您不应该在循环中修改*head。您需要使用局部变量来单步执行列表,否则您将更改调用者的变量以指向列表的末尾。

void DisplayList(ListNode** head){
if(*head == NULL){
printf("List = Empty\n");
}
else{
printf("List = ");
for(ListNode *step = *head;step != NULL; step = step->link){
printf("%d ",step->data);
}
}
printf("\n");
}

void AddList(ListNode** head){
ListNode* temp = (ListNode*)malloc(sizeof(ListNode));
int num;
printf("Data register) ");
scanf("%d",&num);
temp->data = num;
temp->link = NULL;
top++;

if(*head == NULL){
*head = temp;
}
else{
ListNode *step = *head;
for(;step->link != NULL; step = step->link){}
step->link = temp;
}
DisplayList(head);
}

关于c - 为什么带有双指针的链表会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58569907/

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