LeetCode-Remove Duplicates from Sorted List II-从有序链表中移除重复元素-链表操作

https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/

链表操作的题目。基本思想是维护lp,p,q三个指针,主要麻烦在于处理边界条件。

/**
 * 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) return NULL;
        if (head->next==NULL) return head;
        ListNode *lp,*p,*q,*h;
        lp=head;
        p=head;
        q=p->next;
        h=head;
        int lastdel=9999;
        while(q!=NULL){
            if (p->val==lastdel){
                if (lp==p) {
                    lp=q;
                    h=lp;
                }
                else lp->next=q;
                delete p;
                p=q;
                q=q->next;
                continue;
            }
            if (p->val == q->val) {
                lastdel=p->val;
                if (lp==p) {
                    lp=q->next;
                    delete p;delete q;
                    h=lp;
                    p=lp;
                    if (p==NULL) break;
                    q=p->next;
                }
                else{
                    lp->next=q->next;
                    delete p;delete q;
                    p=lp->next;
                    if (p==NULL) break;
                    q=p->next;
                }
            }
            else{
                lp=p;
                p=q;
                q=q->next;    
            }
        }
        if (p!=NULL) {
            if (p->val==lastdel) {
                if (p==h) h=NULL;
                delete p;
                if (lp) lp->next=NULL;
            }
        }
        return h;
    }
};

  

posted @ 2014-10-10 19:50  zombies  阅读(173)  评论(0编辑  收藏  举报