Leetcode Remove Duplicates from Sorted List

OpenSoucre發表於2014-06-21

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

單連結串列移除重複元素問題

注意到節點的刪除即可,可能的變形題是移除迴圈雙向連結串列的重複元素

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

struct ListNode{
    int val;
    ListNode *next;
    ListNode(int x): val(x), next(NULL){}
};

ListNode *deleteDuplicates(ListNode *head){
    if(head == NULL ||  head-> next == NULL) return head;
    ListNode *p = head->next,  *pre = head;
    while(p){
        if(pre->val == p->val){
            ListNode *tmp = p->next;
            pre->next = p->next;
            delete p;
            p = tmp;
        }else{
            pre = p;
            p = p->next;
        }
    }
    return head;
}

void printList(ListNode *head){
    while(head){
        cout<<"-->"<<head->val;
        head = head->next;
    }
    cout<<endl;
}

int main(){
    ListNode *head = new ListNode(1);
   ListNode *p = new ListNode(2);
   head->next = p;
    printList(deleteDuplicates(head));
}

 

相關文章