倾城一笑 发表于 2017-4-23 15:06:43

删除单链表重复元素

Node *CompareList(Node *pHead)//删除重复元素
{
        Node *pNext,*tmp;
        if(pHead == NULL)
        {
                printf("链表为空,无法操作\n");
                exit(0);
        }
        else
        {
                while(pHead !=NULL)
                {
                        pNext = pHead->next;
                        while(pNext != NULL)
                {
               
                        if(pHead->Elem == pNext->Elem)
                        {
                                tmp = pNext->next;
                                free(pNext);
                                pNext = tmp;
                        }
                        else pNext = pNext->next;
                }
                        pHead = pHead->next;
                }
        }
    return pHead;
}
此算法不知道哪里出问题了,运行完之后删除了所有的元素。

fc1735 发表于 2017-5-6 13:36:15

为什么要回传已经指到底的节点
操作看上去没问题,如果你是把最后回传的当头结点,那当然没任何元素

寒月独狼 发表于 2017-5-14 12:02:28

别的不说,就pHead -> Elem 就错了,头结点本来就什么数据都没有,只有一个指针而已
还有,我想说你的判断从头就错了,pHead 本来就是虚构出来的,你用来与 NULL 什么的比较根本没有意义
另外,你把pNext = pHead -> next; 放到循环里,每次都要执行一次pNext = pHead -> next;这样子你的循环总是在原地转圈圈,就是第零步和第一步之间来回走,然后你的第二层循环,如果条件成立,就一直删第一个元素,虽然我不知道为什么会成立,但是看你这话是成立了,所以一直删到没有元素为止
页: [1]
查看完整版本: 删除单链表重复元素