一:允许打乱顺序
1) 排序
2)删除
二:不允许打乱顺序。
每次从第一个数据节点开始,从该节点后查找相同数据的节点,找到删除之。
Node *p,*q,*s;
if(head==NULL || head->next==NULL)return;
q=p=head->next;
//单链表删除节点,必须持有前一个节点,否则无法删除。
while(p->next)//查找和节点p重复的节点,重复则删除。
{
q=p;
s=q->next;
while(s ){
if(s->data ==p->data){//重复判断,重复,要删除
q->next=s->next;//从链表里删除
free(s); //实际删除节点,释放内存
s=q->next; //保持s=q->next;
}else {
//不重复,准备判断下一个节点,节点向链表后面移动。
q=s;
s=s->next;
}
}
if(p->next)
//
删除后,有可能链表,后面所有节点都删除了,所以要判断一下。
p=p->next;//
节点后移,准备判断下一个数据节点,有没有重复节点。
}