[LeetCode]Remove Duplicates from Sorted List II

来源:互联网 发布:java报表技术 编辑:程序博客网 时间:2024/04/28 17:58
struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};class Solution {//three pointer, the previous valid pointer, the first pointer of these same elements, current pointer//always think twice about these edge cases public:ListNode *deleteDuplicates(ListNode *head) {// Start typing your C/C++ solution below// DO NOT write int main() functionListNode* preValid = NULL;ListNode* preSame = NULL;ListNode* cur = head;while (cur){if(!preSame) preSame = cur;else if(cur->val != preSame->val && preSame->next == cur)//continuous different then preSame can be the preValid{if(!preValid){head = preSame;preValid = preSame;}else{preValid->next = preSame;preValid = preSame;}preSame = cur;}else if (cur->val != preSame->val && preSame->next != cur)//not continuous differentpreSame = cur;cur = cur->next;}//4 special edge casesif(!preValid && preSame && preSame->next != NULL) return NULL;else if(!preValid && preSame && preSame->next == NULL) return preSame;else if(preValid && preSame->next != NULL) preValid->next = NULL;else if(preValid && preSame->next == NULL) preValid->next = preSame;return head;}};

second time

/** * 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) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        ListNode dummy(-1);        ListNode* savePtr = &dummy;        ListNode* cur = head;        ListNode* prev = &dummy;        while(cur != NULL)        {            if((prev == &dummy || prev->val != cur->val)                 && (cur->next == NULL || cur->next->val != cur->val))            {                savePtr->next = cur;                savePtr = savePtr->next;            }            prev = cur;            cur = cur->next;        }        savePtr->next = NULL;        return dummy.next;    }};