题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
递归遍历链表,如果当前元素与下一元素不相同,则继续递归;如果相同,则从此结点开始,顺序遍历之后的结点,直至元素不相同,再从该结点开始往下递归。
代码(c++)
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead==NULL) return NULL;
if(pHead->next==NULL) return pHead;
ListNode* cur;
if(pHead->val==pHead->next->val){
cur=pHead;
while(cur!=NULL&&cur->val==pHead->val) cur=cur->next;
return deleteDuplication(cur);
}
else{
pHead->next=deleteDuplication(pHead->next);
return pHead;
}
}
};