Удаление связанного списка - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь удалить полный связанный список, используя функцию free (), но она не работает. Почему?

void delete(Node** head_ref)
     {
         free(*head_ref);
         return;
     }

 delete(&head);

1 Ответ

0 голосов
/ 15 июня 2019

вы просто удаляете головной узел списка.Остальные узлы все еще там.Есть два способа сделать то, что вы хотите сделать.

void delete(Node** head_ref)
 {
     if(head_ref==NULL){
          return;
     }
     delete(head_ref->next);
     free(*head_ref);
     return;
 }

 delete(&head);

и если вы хотите сделать это без рекурсии

void delete(Node** head_ref)
 {
     Node** temp_head = head_ref;
     while(temp_head!=NULL){
         temp_head = head_ref;
         head_ref = head_ref->next;
         free(*temp_head);
         temp_head = head_ref;
     }
     return;
 }

 delete(&head);

PS Я не написал код на C длядолгое время, так что если есть какие-либо ошибки, дайте мне знать.

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