一、问题描述
删除递增单链表中的重复数据。
二、思路分析
设置两个指针(pre、cur),初始化指向第一个数据结点。cur指针用来遍历链表,如果pre指向结点的值和cur指向结点的值相等则删除cur指向的结点,pre依然指向当前结点,否则pre指向下一结点。
三、代码实现
#include<stdio.h>
typedef struct Node{
int data;
struct Node *next;
}*Link;
void initLink(Link &link){
link = new Node;
link->next = NULL;
}
//核心代码
void deleteDul(Link &link){
if(link == NULL || link->next == NULL){
return;
}
Link pre = link->next;
Link cur = link->next;
while(cur->next != NULL){
cur = cur->next;
if(pre->data == cur->data){
pre->next = pre->next->next;
}else{
pre = pre->next;
}
}
}
void AddElem02(Link &L,int s){
Link temp = new Node;
temp->data = s;
temp->next = NULL;
Link p = L;
while(p->next != NULL){
p = p->next;
}
p->next = temp;
}
void print(Link link){
Link temp = link->next;
while(temp!=NULL){
printf("%d\t",temp->data);
temp = temp->next;
}
}
int main(){
Link link;
initLink(link);
AddElem02(link,1);
AddElem02(link,1);
AddElem02(link,2);
AddElem02(link,3);
AddElem02(link,3);
AddElem02(link,3);
AddElem02(link,4);
AddElem02(link,4);
AddElem02(link,7);
AddElem02(link,7);
AddElem02(link,7);
AddElem02(link,9);
AddElem02(link,9);
AddElem02(link,9);
//print(link);
deleteDul(link);
print(link);
}