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.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode *L, *tmp,*pre;
int k;
if(head == NULL ) return NULL;
if(!head->next) return head;
while(head->val == head->next->val)
{
k=head->val;
while(head->next && head->next->val == k)
{
head=head->next;
}
if(!head->next) return NULL;
head=head->next;
if(!head->next) return head;
}
if(!head->next) return head;
pre = head;
L = pre->next;
while(L->next)
{
while( L->val == L->next->val)
{
k=L->val;
while(L->next && L->next->val == k)
{
L=L->next;
}
if(!L->next) {pre->next=NULL;return head;}
L=L->next;
if(!L->next) {pre->next=L;return head;}
}
pre->next=L;
pre=L;
L=pre->next;
}
return head;
}
保留前指针,主要头结点重复的删除。