LeetCode: Remove Duplicates from Sorted List II

来源:互联网 发布:合作医疗软件 编辑:程序博客网 时间:2024/06/06 07:37

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct 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.

/** * 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) {        ListNode *pre = NULL, *cur = head, *iter = NULL;        while(cur != NULL)        {            iter = cur;            while(iter->next != NULL && iter->val == iter->next->val)            {                iter = iter->next;            }            if(iter != cur)            {                if(pre == NULL)                {                    head = iter->next;                }                else                {                    pre->next = iter->next;                }            }            else            {                pre = cur;            }                        cur = iter->next;        }        return head;    }};


Round 2:

class Solution {public:    ListNode *deleteDuplicates(ListNode *head) {        ListNode *pre = NULL, *newHead = NULL, *cur = head;        int flag = 0;        while(cur != NULL)        {            while(cur->next && cur->val == cur->next->val)            {                flag = 1;                cur = cur->next;            }            if(flag == 1)            {                flag = 0;                cur = cur->next;                            }            else            {                if(newHead == NULL)                {                    newHead = cur;                }                else                {                    pre->next = cur;                }                pre = cur;                cur = cur->next;            }        }        if(pre != NULL)            pre->next = cur;        return newHead;    }};


0 0