首页 > 代码库 > Remove Duplicates from Sorted List II

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.

思路:若当前元素的next存在,且当前元素与其next值相同,则使用循环跳过后面所有与当前元素相同的元素。

 1 class Solution { 2 public: 3     ListNode *deleteDuplicates( ListNode *head ) { 4         if( !head || !head->next ) { return head; } 5         ListNode *end = 0, *node = head; 6         head = 0; 7         while( node ) { 8             if( node->next && node->val == node->next->val ) { 9                 node = node->next;10                 while( node->next && node->val == node->next->val ) { node = node->next; }11             } else {12                 if( end ) {13                     end->next = node;14                     end = node;15                 } else {16                     head = end = node;17                 }18             }19             node = node->next;20         }21         if( end ) { end->next = 0; }22         return head;23     }24 };

 

Remove Duplicates from Sorted List II