C 在递归函数中删除链表的节点
花费超过10小时后,开发以下代码:C 在递归函数中删除链表的节点,c,recursion,linked-list,C,Recursion,Linked List,花费超过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) {
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开始
移除第一个节点后,将prevptr
、head
和temp
设置为所有指向2
然后在函数的末尾,您递归地在指向3
的temp->next
上调用它
结果是,删除第一个节点时跳过了第二个节点