题解 | #删除链表中重复的结点#
删除链表中重复的结点
https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @return ListNode类
*/
struct ListNode* deleteDuplication(struct ListNode* pHead ) {
// write code here
struct ListNode dummyHead = {.next = pHead}; //虚拟头节点,next指向pHead,用于处理第一个节点就重复的情况
struct ListNode* pre = &dummyHead; //pre是不重复的节点
struct ListNode* cur = pre->next; //cur是要比较是否重复的节点
struct ListNode* tmp;
while(cur && cur->next){
if(cur->val == cur->next->val){ //如果出现重复节点,
tmp = cur;
while(tmp && cur->val == tmp->val) //遍历到重复节点后一个节点
tmp = tmp->next;
cur = tmp;
pre->next = cur;
}else{ //cur和cur->next不重复,则pre cur各移到下一位
pre = cur;
cur = cur->next;
}
}
return dummyHead.next; //返回虚拟头节点的next
}
