花费超过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-”时,该功能只删除第一个节点,第二个节点仍然无法删除。
我的代码有什么问题?
答案 0 :(得分:1)
假设您从1->2->3
删除第一个节点后,您将prevptr
,head
和temp
设置为2
。
然后在函数结束时,您在temp->next
上递归调用它,指向3
。
结果是您在删除第一个节点时正在跳过第二个节点。