以下函数删除未排序的链接列表中的重复项。它适用于所有情况,除非链接列表只有两个具有重复值的节点,例如10-> 10> NULL 有人能指出我哪里出错了吗?
void deldup(struct node* head)
{
struct node* outer = head;
struct node* inner, *temp;
while (outer->next != NULL && outer != NULL)
{
inner = outer;
while (inner != NULL && inner->next != NULL)
{
if (inner->next->data == outer->data)
{
temp = inner->next;
inner->next = inner->next->next;
free(temp);
}
else
{
inner = inner->next;
}
}
outer = outer->next;
}
}
答案 0 :(得分:0)
删除第二个10后,outer-> next为null,将其分配给outer。下一个外部while循环条件尝试访问外部>然后首先崩溃。
解决方案:将outer->next != NULL && outer != NULL
反转为outer != NULL && outer->next != NULL
。请记住,逻辑AND的第二部分如果第一部分已经为假,则不会被评估,对于像这样的场景,它就是正确的。