gpt4 book ai didi

C 链表向末尾添加节点

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

我正在尝试创建一个可以将信息添加到链表的程序。似乎一旦我添加了 2 个以上的节点,之前添加的节点就会被覆盖。在完成这项工作时我是否遗漏了什么?

我从这个函数开始,它要么添加到列表的前面,要么如果已经有一个节点添加到前面它调用函数 addToBack

ListHeadPtr Front(ListHeadPtr theList, list * toBeAdded){

printf("Received in addToFront\n");

if(theList == NULL){
theList = toBeAdded;
return(theList);
}

else{
theList = addToBack(theList,toBeAdded);
/*toBeAdded->next = theList;
theList = toBeAdded;*/
return (theList);
}

}

ListHeadPtr back(ListHeadPtr theList, item * toBeAdded){

if(theList == NULL){
theList = addToFront(theList,toBeAdded);
return(theList);
}

else{
list *current;
current = theList;
while (current->next!=NULL){
current = current->next;
}
current->next = toBeAdded;
return(current);
}

}

item(toBeAdded 由这个函数定义

item *createItem(int time){

item *itemPtr = (list *) malloc(sizeof(item));

if(NULL == itemPtr)
{
printf("Unable to create item\n");
return (NULL);
}

itemPtr->waitTime = time;
itemPtr->next = NULL;

return (itemPtr);
}

最佳答案

在你的 [addTo]Back 函数中

return(current);

应该返回列表的头部。您正在做的是将列表截断为其最后两个元素。

避免此类错误的一种方法是使用精确的语义。 addToBack 定义返回什么?调用者希望它返回添加了节点的列表。函数之前应该有一个文档注释,说明它做什么以及它返回什么。该注释可以指导您编写代码……如果最后只有一个语句返回列表,而不是多个返回,那么代码会更好。那么这个bug不可能发生。

关于C 链表向末尾添加节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736554/

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