gpt4 book ai didi

关于删除链表最后一个节点的困惑

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

删除最后一个节点的逻辑如下对,

转到下一个为NULL 的节点的指针,然后释放它,对吗?我试图在一个函数中实现这个逻辑:

node* Delete_Last(node*head){
node* i=head;
while (i->next!=NULL){
i=i->next;
}
free(i);
i=NULL;
return head;
}

当我尝试打印列表时,我做不到 - 这是一个无限循环。您能告诉我我的逻辑有什么缺陷以及如何改正吗?

最佳答案

不,这不对。您还必须更新前一个节点和下一个节点,如果 head 是最后一个节点,则必须更新 head 。所以首先你应该把指针指向头指针,你需要它以防你需要更新头。其次,因为它是单链表,你应该保留前一个节点:

node* Delete_Last(node** head) {
if (!*head) {
return 0;
}

node* i = *head, *previous = 0;
while (i->next){
previous = i;
i = i->next;
}
free(i);
if (previous) {
previous->next = 0;
} else {
*head = 0;
}
return previous;
}

我不知道你想返回什么,所以我假设你的代码是新的结束,再次返回 head 没有意义。现在你可以调用它:

node* prevLast = Delete_Last(&head);

关于关于删除链表最后一个节点的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50373829/

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