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