Leetcode: Remove Duplicates from Sorted List II

来源:互联网 发布:bx5u3图文编辑软件 编辑:程序博客网 时间:2024/06/15 14:36

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) {        if (head == NULL || head->next == NULL) {            return head;        }                ListNode *prev = NULL;        ListNode *cur = head;        head = NULL;        bool duplicate = false;        while (cur != NULL && cur->next != NULL) {            if (cur->val == cur->next->val) {                duplicate = true;            }            else {                if (!duplicate) {                    if (head == NULL) {                        head = prev = cur;                    }                    else {                        prev->next = cur;                        prev = cur;                    }                }                duplicate = false;            }            cur = cur->next;            }                if (prev != NULL) {            if (duplicate) {                prev->next = NULL;            }            else {                prev->next = cur;            }        }        else if (!duplicate) {            head = prev = cur;        }                return head;    }};

========================第二次============================

/** * 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 == NULL || head->next == NULL) {            return head;        }                ListNode* cur = head->next;        ListNode* prev = head;        ListNode* new_head = new ListNode(-1);        ListNode* new_cur = new_head;        bool duplicated = false;        while (cur != NULL) {            if (cur->val == prev->val) {                duplicated = true;            }            else {                if (!duplicated) {                    new_cur->next = prev;                    new_cur = prev;                }                duplicated = false;            }            prev = cur;            cur = cur->next;        }                if (!duplicated) {            new_cur->next = prev;        }        else {            new_cur->next = NULL;        }                head = new_head->next;        delete new_head;                return head;    }};


0 0