题解 | #删除链表中重复的结点#
删除链表中重复的结点
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 }