struct ListNode* deleteDuplication(struct ListNode* pHead ) {
if(pHead==NULL){
return NULL;
}
struct ListNode* pre=NULL;
struct ListNode* node=pHead;
struct ListNode* next=node->next;
//当node不为空时进行循环
while(node){
//初始化一个flag用于标注当前节点是否需要删除
int flag=0;
//取出当前值
int cur_val=node->val;
//如果next已经空了,就没必要继续比较,直接跳出最外层while循环
if(next==NULL){
break;
}
//取出下一个节点的值
int next_val=next->val;
//如果下一个节点的值与当前节点相等,进行一下while循环
while(cur_val==next_val){
flag=1;//flag置为1
node->next=next->next;//把当前节点的next指向下下个节点
next=next->next;//把next指向next下一个节点
//如果next已经空了,就不需要再比较值是否相等,跳出当前while循环
if(!next){
break;
}
//取出新next的值
next_val=next->val;
}
//如果flag为1,说明需要删除当前节点
if(flag==1){
//如果当前节点是头节点,即pre是空
if(pre==NULL){
pHead=next;//头节点变成下一个节点
node=pHead;//当前节点更新
if(next){//当next不为空的时候才更新next
next=next->next;
}
}else{//如果pre不是空
pre->next=next;//跳过当前节点,pre的next直接指向next
node=next;//当前节点换为next
if(next){//当next不为空的时候才更新next
next=next->next;
}
}
}else{//如果flag不是1,说明不需要删除当前节点
pre=node;//正常迭代pre和node
node=next;
if(next){////当next不为空的时候才更新next
next=next->next;
}
}
}
return pHead;
}