void DeleteList(linklist &L)
{
linklist p,q,s;
p=L->next ;
while(p)
{
q=p->next;
while(q)
{
if(q->data==p->data )
{
s=q;
q=s->next;
free(s);
}
else
q=q->next ;
}
p=p->next ;
}
}
void RemoveDupNode(linklist &L)//删除重复结点的算法
{
linklist p,q,r;
p=L->next;
while(p) // p用于遍历链表
{
q=p;
while(q->next) // q遍历p后面的结点,并与p数值比较
{
if(q->next->data==p->data)
{
r=q->next; // r保存需要删掉的结点
q->next=r->next; // 需要删掉的结点的前后结点相接
free(r);
}
else
q=q->next;
}
p=p->next;
}
}
如果是这样就对了 ,为什么?
链表链接不对,修改:
if(q->data==p->data )
{
s=q;
//q=s->next;
p->next=s->next; //增加
free(s);
}
没有保存中间节点,这样导致非法访问内存...