Я пытаюсь реализовать deleteDuplicates, учитывая связанный список в C. Я столкнулся с проблемами с segFault, и я не уверен, почему. Мой тестовый пример дает ему связанный список с двумя узлами, каждый с данными 3 ниже. В моих deleteDups вы увидите два закомментированных if-блока. Если я раскомментирую это, у меня не будет segFault, и код будет работать нормально.deleteDuplicates single-linkedlist C
Почему это так? Мне кажется, что утверждение if - это именно то, что проверяет цикл while ...
Заранее благодарен!
моя структура узла и код
typedef struct node{
int data;
struct node *next;
} *node;
void deleteDups(node *head)
{
if (!*head)
return;
node current = *head;
node runner;
while (current)
{
runner = current;
while (runner->next)
{
if (runner->next->data == current->data)
{
node tmp = runner->next;
runner->next = runner->next->next;
free(tmp);
}
/*if(runner->next == NULL)
{
break;
}*/
runner = runner->next;
}
/*if (current->next == NULL)
{
break;
}*/
current = current->next;
}
}
int main(int argc, char*argv[])
{
node one = (node) malloc (sizeof (struct node));
one->data = 3;
one->next = NULL;
node head = (node) malloc (sizeof (struct node));
head->data = 3;
head->next = one;
printList(head);
deleteDups(&head);
printList(head);
return 0;
}