标签:
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; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode* delete_from=NULL,*delete_to=NULL; ListNode* pre =NULL,*cur=head,*cur_next=NULL; while(cur){ cur_next = cur->next; /* 找值相同的链串 */ bool has_found = false; while(cur_next && cur_next->val == cur->val){ cur_next = cur_next->next; has_found = true; } /*如果找到了连续的重复元素,则删除重复值的串链,如果没找到更新前驱结点*/ if(has_found){ delete_from = cur; delete_to = cur_next; while(delete_from != delete_to){ ListNode* tmp = delete_from->next; delete(delete_from); delete_from = tmp; } pre ? pre->next=cur_next : head = cur_next; }else{ pre = cur; } cur = cur_next; } return head; } };
[Linked List]Remove Duplicates from Sorted List II
标签:
原文地址:http://www.cnblogs.com/zengzy/p/5041622.html