题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(!pHead)return pHead;
ListNode* tmp = pHead;
ListNode* res = new ListNode(1);
ListNode* res1 = res;
while(tmp){
if(tmp->next){
if(tmp->next->val == tmp->val){
while(tmp->next->val == tmp->val){
tmp = tmp->next;
if(!tmp->next)break;
}
tmp = tmp->next;
}
else{
res->next = tmp;
res = res->next;
tmp = tmp->next;
}
}
else{
res->next = tmp;
res = res->next;
tmp = tmp->next;
}
}
res->next = NULL;
return res1->next;
}
};