一.问题描述
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
.
二.我的解题思路
删除链表节点的题目做得多了,说白了本题的考点就在于各种边界条件的处理。本题需要记录下duplicate number串的前一个数和后一个数。还要注意头结点也可能被删除。
测试通过的程序如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head==NULL) return NULL;
ListNode* before=NULL;ListNode* after=NULL;ListNode* res=head;
ListNode* curr=head;ListNode* next=head->next; ListNode* pri;
while(curr && next){
while(next!=NULL && curr->val!=next->val ){
before=curr;
curr=curr->next;
next=curr->next;
}
if(next==NULL) break;
while(next!= NULL && curr->val==next->val ){
curr=curr->next;
next=curr->next;
}
if(next==NULL) after=NULL;
after=next;
if(before==NULL )
{res=after;curr=after;
if(after==NULL)
return NULL;
next=curr->next;continue;
}
before->next=after;
if(after==NULL) break;
curr=after;
next=curr->next;
}
return res;
}
};