gpt4 book ai didi

c - 从C中的链表中删除最后两个元素

转载 作者:行者123 更新时间:2023-12-05 01:32:40 26 4
gpt4 key购买 nike

我有这段代码,它从链表中删除最后一个元素。我必须进行哪些更改才能删除链表的最后两个元素?

void deletesEnd() {
struct node *temp, *last;

temp = head;
last = temp;

while (temp != NULL && temp->next != NULL) {
last = temp;
temp = temp->next;
}

if (last == temp) {
free(temp);
head = NULL;
} else {
free(last->next);
last->next = NULL;
}
}

最佳答案

删除列表最后 2 个元素的最简单解决方案是调用 deletesEnd() 两次。请注意,deletesEnd() 应将 head 作为参数并返回新值。您将通过发出嵌套调用来删除最后 2 个:

struct node *deletesEnd(struct node *head) {
struct node *temp, *last;

last = temp = head;
while (temp && temp->next != NULL) {
last = temp;
temp = temp->next;
}
if (last == head) {
free(head);
head = NULL;
} else {
free(last->next);
last->next = NULL;
}
return head;
}

删除最后一个元素:head = deletesEnd(head);

删除最后 2 个元素:head = deletesEnd(deletesEnd(head));

设计的简单性足以补偿两次枚举列表的开销。

如果你绝对想要一个特定的功能,你可以这样扩展你的方法:

struct node *deleteLast2Nodes(struct node *head) {
struct node *temp, *last;

last = temp = head;
while (temp && temp->next != NULL && temp->next->next != NULL) {
last = temp;
temp = temp->next;
}
if (last == head) {
if (head) {
free(head->next);
}
free(head);
head = NULL;
} else {
free(last->next->next);
free(last->next);
last->next = NULL;
}
return head;
}

关于c - 从C中的链表中删除最后两个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40803660/

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