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

时间:2011-06-06 05:59:52

标签: 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) {
      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 个答案:

答案 0 :(得分:1)

假设您从1->2->3

开始

删除第一个节点后,您将prevptrheadtemp设置为2

然后在函数结束时,您在temp->next上递归调用它,指向3

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