gpt4 book ai didi

c - 附加到链表的元素在附加后似乎发生了变化

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:46 24 4
gpt4 key购买 nike

我的代码(用 C 语言编写)有一个部分,其中给出了一个链表和一个项目。该项目被追加到链表中,我在追加前后检查该项目的值。

它显示了一些奇怪的行为,因为第二次附加尝试似乎更改了附加到列表后传递的元素。

调用append函数的部分代码:

有两种情况:第一种(breaks==NULL),列表为空。在第二个中,它不是。

  if (breaks == NULL){
breaks = createNode(breakstart, breakend);
printf("Headbreaks info:\n");
printf("Next: %p\n", breaks -> next);
head = breaks;
appendToList(schedule, breaks); //append the break found to schedule list
printf("\nBreaks info after append:\n");
printf("Next: %p \n", breaks -> next);
} else {
breaks -> next = createNode(breakstart, breakend);
breaks = breaks -> next;
printf("Breaks info:\n");
printf("Next: %p \n", breaks -> next);
appendToList(schedule, breaks); //append the break found to schedule list
printf("\nBreaks info after append:\n");
printf("Next: %p \n", breaks -> next);
i++;
}

附加功能:移动到列表的末尾并将项目附加到它。也有一些打印功能供一些业余调试。

void appendToList(timeblock *list, timeblock* item){
while (list -> next != NULL){
printf("(%d - %d)", list -> start, list -> end);
list = list -> next;
}
printf("\nAppend to: (%d - %d)", list -> start, list -> end);
list -> next = item;
}

节点创建:

timeblock* createNode(int start, int end){
timeblock *new = malloc(sizeof(timeblock));
new -> start = start;
new -> end = end;
new -> next = NULL;
return new;
}

输出片段:

Headbreaks info:
Next : 00000000
Headbreaks info after append:
Next : 00000000

Breaks info:
Next : 00000000
Breaks info after append:
Next : 00322438 //I expected it to be null!

最佳答案

据我了解,在第一个代码片段的第二种情况下

breaks -> next = createNode(breakstart, breakend);
breaks = breaks -> next;
// some debug code
appendToList(schedule, breaks);

将一个节点插入到列表中,该列表已通过其前任指向它而插入。

关于c - 附加到链表的元素在附加后似乎发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34044767/

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