繁体   English   中英

在递归 function 中删除链表的节点

[英]Removing a node of a linked list in a recursive function

在花费了 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-”时,function 只删除第一个节点,第二个节点仍然无法删除。

我的代码有什么问题?

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

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

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

结果是您在删除第一个节点时跳过了第二个节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM