2013-12-19 3 views
0

Я пытаюсь просто удалить дубликаты из связанного списка, поэтому, если список запущен как [1,1,2,3,4,4,4,5], тогда прилагаемый список будет [1,2,3, 4,5]. Код ниже.Удаление дубликатов из связанного списка в c?

struct node_h 
{ 
    int data; 
    struct node_h* next; 
} node; 

void remove_h(node* head) 
{ 
    while (head != NULL) 
    { 
     if (head->data == head->next->data) 
     { 
      if (head->next->next == NULL) 
      { 
       head->next = NULL; 
      } 
      else 
      { 
       head->next = head->next->next; 
      } 
     }   
     head = head->next; 
    } 
} 

Проблема в том, что это сегментирование неисправностей. Иногда.

+0

Кроме того, вы никогда не «освобождаете узел, когда удаляете его из списка (вводя утечку памяти). –

+0

У вас также есть утечка памяти –

ответ

7

Претендент if (head->data == head->next->data) ... если head->next не имеет значения, это должно быть segfault.

Проверьте это условие во-первых, дубликат невозможен, если это правда: просто добавьте if (head->next == NULL) break; в качестве первого утверждения во время или примените условие while.

3

Вы проверяете, есть ли head != NULL, но вы не проверяете, что head->next не имеет значения NULL, прежде чем вы получите доступ к head->next->data.

Смежные вопросы