LeetCode82.Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
一开始写的代码,卡在了如何删除最后一个元素上
参考:http://www.cnblogs.com/AndyJee/p/4467051.html
解题思路:
1.递归思路
如果第一个结点和第二个结点不一样,则第一个结点可以直接作为新链表的头结点,后面继续删除重复的过程;如果第一个结点和第二个结点相同,则需要继续遍历,直到找到第一个与第一个结点不同的结点作为新链表的头结点,如果找不到,说明链表所有结点元素都一样,新链表为NULL,否则从新的头结点出发,继续删除重复的过程。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL || head->next==NULL)
return head;
ListNode *p=head->next;
if(p->val!=head->val){
head->next=deleteDuplicates(p);
return head;
}
else{
while(p && p->val==head->val) p=p->next;
return deleteDuplicates(p);
}
}
};
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL || head->next==NULL)
return head;
ListNode *pDel=new ListNode(0);
pDel->next=head;
ListNode *prev=pDel;
ListNode *curr=prev->next;
while(curr->next){
if(curr->next->val!=curr->val){
if(prev->next==curr)
prev=curr;
else
prev->next=curr->next;
}
curr=curr->next;
}
if(prev->next!=curr)
prev->next=curr->next;
return pDel->next;
}
};