题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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");
}