删除单链表重复元素
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;
}
此算法不知道哪里出问题了,运行完之后删除了所有的元素。 为什么要回传已经指到底的节点
操作看上去没问题,如果你是把最后回传的当头结点,那当然没任何元素 别的不说,就pHead -> Elem 就错了,头结点本来就什么数据都没有,只有一个指针而已
还有,我想说你的判断从头就错了,pHead 本来就是虚构出来的,你用来与 NULL 什么的比较根本没有意义
另外,你把pNext = pHead -> next; 放到循环里,每次都要执行一次pNext = pHead -> next;这样子你的循环总是在原地转圈圈,就是第零步和第一步之间来回走,然后你的第二层循环,如果条件成立,就一直删第一个元素,虽然我不知道为什么会成立,但是看你这话是成立了,所以一直删到没有元素为止
页:
[1]