Remove Duplicates from Sorted List II

来源:互联网 发布:网站建设优化推广 编辑:程序博客网 时间:2024/06/10 00:45

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving onlydistinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.


Solution:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* deleteDuplicates(ListNode* head) {        if(!head || !head->next) return head;        ListNode* lead = new ListNode(-1);        lead->next = head;        ListNode *pre = head, *p = lead;        head = head->next;        bool flag = false;        while(head)        {            if(head->val == pre->val) flag = true;            else if(flag)            {                p->next = head;                flag = false;            }            else            {                p->next = pre;                p = p->next;            }            pre = head;            head = head->next;        }        if(flag) p->next = NULL;        return lead->next;    }};


0 0