为什么没有代码适用于只有2个具有相同值的节点的链表?

时间:2014-06-01 14:00:56

标签: c pointers linked-list

以下函数删除未排序的链接列表中的重复项。它适用于所有情况,除非链接列表只有两个具有重复值的节点,例如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;
    }
}

1 个答案:

答案 0 :(得分:0)

删除第二个10后,outer-> next为null,将其分配给outer。下一个外部while循环条件尝试访问外部>然后首先崩溃。

解决方案:将outer->next != NULL && outer != NULL反转为outer != NULL && outer->next != NULL。请记住,逻辑AND的第二部分如果第一部分已经为假,则不会被评估,对于像这样的场景,它就是正确的。