C でリンクリストを指定して deleteDuplicates を実装しようとしています。segFault で問題が発生していますが、その理由がわかりません。それぞれがデータ3を持つ2つのノードを持つリンクリストを与える私のテストケースは以下の通りです。私の deleteDups では、コメント化された 2 つの if ブロックが表示されます。コメントを外すと、segFault は発生せず、コードは正常に動作しているように見えます。
なぜそうなのですか?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;
}