单链表的存储结构:
typedef struct LinkList{
int data;
LinkList * next;
}
分析:
这里删除重复节点,分两种情况:
1.第一种是链表本身递增的
2.第二种是链表可能是无序的
无序的更复杂些,递增更简单些。
这里是递增,说明重复的结点是在一起的,连续的。
既然要删除结点,肯定要定义两个指针,pre,p
思路:
1.定义两个指针pre,p ,pre一开始指向第一个节点,p暂且不指向
2.通过while循环,条件为p !=null,
当pre->data == pre->next->data 时,一开始是第一,第二个节点比较
p = pre->next;
pre->next = p->next;
free( p);
否则 ,跳出循环
4.p后移。(p= p->next)
C代码实现:
void dels(LinkList *&L){
LinkList * pre = L->next,*p;
while(pre!= null){
if(pre->data == pre->next->data){
p = pre->next;
pre->next = p->next;
free(p);
}else p=p->next;
}
}