gpt4 book ai didi

c - 在递归函数中删除链表的节点

转载 作者:行者123 更新时间:2023-11-30 16:01:40 26 4
gpt4 key购买 nike

花了10多个小时,开发了以下代码:

struct stockRecord* temp = NULL;
struct stockRecord* head = NULL;
struct stockRecord* prevptr = NULL;
struct stockRecord* recurfun(struct stockRecord* list) {

temp = list;
if (head == NULL) head = temp;
if (temp == NULL) {
return head;
} else {
/*first node*/
if (prevptr == NULL) {

if (strstr(temp->name, "ABC-") != NULL) {

temp = temp->next;

head = temp;
prevptr = head;

}
}
/*last node*/
if (temp->next == NULL) {
if (strstr(temp->name, "ABC-") != NULL) {
prevptr->next = NULL;

}
return head;
}
/*middle node*/

if (strstr(temp->name, "ABC-") != NULL) {
prevptr->next = temp->next;

} else {
if (prevptr != NULL) {
prevptr = temp;
} else {
prevptr = head;
}
}

return recurfun(temp->next);

}

问题是,当第一个节点和第二个节点同时包含“ABC-”时,该函数只删除第一个节点,第二个节点仍然无法删除。

我的代码有什么问题?

最佳答案

假设您从 1->2->3 开始

删除第一个节点后,将 prevptrheadtemp 设置为全部指向 2.

然后在函数末尾,您在指向 3temp->next 上递归调用它。

结果是,当您删除第一个节点时,您会跳过第二个节点。

关于c - 在递归函数中删除链表的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6248276/

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