Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在递归函数中删除链表的节点_C_Recursion_Linked List - Fatal编程技术网

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

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) {

花费超过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开始

移除第一个节点后,将
prevptr
head
temp
设置为所有指向
2

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

结果是,删除第一个节点时跳过了第二个节点