给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:快慢指针
在原链表上修改:
一个指针pfront记录当前没有出现重复数字指针位置,一个指针p遍历链表,将不是重复数字的节点记录让pfront->next=p,然后pfront=pfront->next,继续遍历p到链尾。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode *p=new ListNode(-1); ListNode *pfront=new ListNode(-1); p=head; pfront->next=head; int v; if(head==NULL) return head; while(p->next!=NULL) { if(p->val==p->next->val) { v=p->val; p=p->next->next; while(p!=NULL) { if(p->val==v) p=p->next; else break; } if(pfront->next==head) { head=p; pfront->next=head; } else pfront->next=p; if(p==NULL) break; } else { pfront=pfront->next; p=p->next; } } return head; } };
|