Рекурсивный вызов для очистки связанного списка? - PullRequest
0 голосов
/ 22 сентября 2018

Я ищу решение для очистки связанного списка, и это то, что мне дают.

Я не уверен, как мне это сделать:

void clearRecursively(LIST **presentNode, LIST **endNode){

       if (*presentNode == NULL)
           return;

       LIST *nextNode;

       clearRecursively(&nextNode, endNode);

      *presentNode = NULL;
      *endNode = NULL;
}

1 Ответ

0 голосов
/ 22 сентября 2018

Вы передаете указатель, который ни на что не указывает: clearRecursively(&nextNode, endNode);

Помимо присвоения указателей на NULL не удалит память, на которую они указывают - free(POINTER_NAME) для этого.

Ясно, что вы имеете в виду удаление - поскольку полный код не был предоставлен, вот способ (например, цель) сделать это с предположением, что это односвязный список:

 //THIS TRAVERSES DOWN THE LINKED-LIST AND THEN DELETES THAT LAST NODE
 //RECURSIVELY IT DELETES THE ENTIRE LIST

 void clear_recursively(LIST **head)
 {
      if(*head!=NULL)
      {
           clear_recursively(&((*head)->next));
           free(*head);
           *head=NULL;
      }
 }

Вам просто нужно передать адрес указателя head (указатель на первый узел), и он будет завершен.

Если под очисткой вы подразумеваете просто установить поле данных всего связанного списка к некоторому значению тогда:

 void clear_recursively(LIST *head)
 {
      if(head!=NULL)
      {
           clear_recursively(head->next);
           head->data = //SOME VALUE;
      }
 }
...