题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ #include <cstdio> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* deleteDuplicates(ListNode* head) { // write code here if (!head) return nullptr; ListNode * dummy=new ListNode(0);//创建头结点 dummy->next=head; ListNode* p = head; ListNode * pre=dummy;//保存重复结点的前一个结点 while (p) { int flog=0;//默认没有重复结点 ListNode* cur = p->next; while (cur) { if (cur->val == p->val) { flog=1; pre->next = cur->next;//出现重复结点把他前一个结点实现重复结点的后一个 } else {//直接退出没有重复 break; } cur = cur->next; } if (flog==0) pre=p;//没有重复跟新重复结点的前一个 p = cur;//下一个结点 注意不能写p=p->next有重复的话他的下个也是重复应该从下一个不是重复开始 } return dummy->next; } };