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; }