82. Remove Duplicates from Sorted List II

一串列表删除所有相邻的重复元素

Example 1:

Input: 1->2->3->3->4->4->5

Output: 1->2->5

Example 2:

Input: 1->1->1->2->3
Output: 2->3

思路就是可以在前方放一个前置结点,然后向后遍历,找到一段相邻的重复的结点,然后删除这段即可

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==NULL){return head;}
        ListNode *first, *a, *b, *c, *temp;
        first = new ListNode(-1);
        a = first;
        first->next = head;
        b=a->next;
        while(b!=NULL){
            c=b->next;
            //c是空的
            if(c==NULL){
                return first->next;
            }
            //b这个结点值是独一无二的
            if(c->val!=b->val){
                a=b;
                b=c;
            }else{
                //将c的位置放在和b值相同的最后一个结点上
                while(c->next!=NULL && c->next->val==c->val){
                    c=c->next;
                }
                b=c->next;
                //用来删除重复结点的
                // c=a->next;
                // while(c!=b){
                //     temp =c;
                //     c = c->next;
                //     delete temp;
                // }
                a->next = b;
            }
        }
        return first->next;
    }
};

 

posted @ 2019-03-07 00:50  茫茫碧落  阅读(146)  评论(0编辑  收藏  举报