剑指offer-删除链表中重复的结点

2016/05/24 C和C++基础

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

#include <iostream>
#include <vector>
using namespace std;

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

ListNode* deleteDuplication(ListNode* pHead){
    if(pHead==NULL) return NULL;
	vector<ListNode*> vec;
    ListNode *p=pHead->next;
    ListNode *pre=pHead;
    int repeatnum=NULL;
    while(p!=NULL){
        if(p->val!=pre->val&&repeatnum!=pre->val)
            vec.push_back(pre);
        else
            repeatnum=pre->val;
        pre=p;
        p=p->next;
    }
    if(pre->val!=repeatnum)
        vec.push_back(pre);
    int len=vec.size();
    if(len==0) return NULL;
    for(int i=0;i<len-1;i++)
        vec[i]->next=vec[i+1];
    vec[len-1]->next=NULL;
    return vec[0];
}

int main(){
	ListNode n1(1),n2(2),n3(3),n4(3);
	ListNode n5(4),n6(4),n7(5);
	n1.next=&n2;
	n2.next=&n3;
	n3.next=&n4;
	n4.next=&n5;
	n5.next=&n6;
	n6.next=&n7;
	ListNode *pHead=&n1;
	deleteDuplication(pHead);
	system("pause");
}

Search

    Post Directory