Удаление узла из связанного списка в рекурсивной функции - PullRequest
0 голосов
/ 06 июня 2011

Потратив более 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 Ответ

1 голос
/ 06 июня 2011

Предположим, вы начинаете с 1->2->3

После удаления первого узла вы устанавливаете prevptr, head и temp, чтобы все указывали на 2.

Затем в конце функции вы рекурсивно вызываете ее на temp->next, что указывает на 3.

В результате вы пропускаете второй узел при удалении первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...