题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
思路:本题的难点在于头节点的处理和重复2次以上节点的处理,采用递归的方法,一次删除重复节点。
代码:
<span style="font-size:18px;">ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == NULL || pHead->next == NULL)
return pHead;
if(pHead->val == pHead->next->val){
int val = pHead->val;
ListNode *cur = pHead->next->next;
delete pHead->next;
delete pHead;
while(cur != NULL && cur->val == val){
ListNode *temp = cur;
cur = cur->next;
delete temp;
}
return deleteDuplication(cur);
}
else{
pHead->next = deleteDuplication(pHead->next);
}
return pHead;
}</span>