题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
code
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
//1.创建一个新的头结点指向原来头结点,防止从第一个结点开始删除
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==nullptr||pHead->next==nullptr)
return pHead;
ListNode*pNewHead=new ListNode(-1);
pNewHead->next=pHead;
ListNode*p1=pNewHead;
ListNode*p2=pHead;
ListNode*next;
while(p2->next!=nullptr&&p2!=nullptr){
next=p2->next;
if(p2->val==next->val){
while(next!=nullptr&&p2->val==next->val)
next=next->next;
p1->next=next;
p2=next;
}else{
p1=p2;
p2=p2->next;
}
}
return pNewHead->next;
}
//2.递归
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==nullptr||pHead->next==nullptr)
return pHead;
ListNode* Now;
if(pHead->next!=nullptr&&pHead->next->val==pHead->val){
Now=pHead->next->next;
while(Now!=nullptr&&Now->val==pHead->val)
Now=Now->next;
return deleteDuplication(Now);
}else{
Now=pHead->next;
pHead->next=deleteDuplication(Now);
return pHead;
}
}
};