单链表中删除值相同的多余结点(未排序)
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
void delSame1(LinkList &L)
{
LNode *p, *q, *s;
p = L;
while(p != NULL)
{
s = p;
q = p->next;//p为q的前驱
while(q != NULL)
{
if(p->data == q->data)//如果两个元素重复,删除第二个元素,并将s和q指针后移
{
s->next = q->next;
free(q);
q = s->next;
}
else//两个元素不重复,s和q指针后移
{
s = q;
q = q->next;
}
}
p = p->next;//将q后移一位继续进行判断
}
}
改:删除已排序链表中的重复元素
void delSame2(LinkList &L)
{
LNode *p, *q;
p = L;
while(p != NULL)
{
q = p->next;//p为q的前驱
while(q != NULL)
{
if(p->data == q->data)
{
p->next = q->next;
free(q);
q = p->next;
}
else
{
p = q;
q = q->next;
}
}
}
}