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.
同样使用二级指针,比我之前在牛客网上做这道题的方法简便了好多。这又是一大进步。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode** pp = &head;
bool deleted = false;
while((*pp) != NULL){
if((*pp)->next == NULL){
if(deleted) *pp = NULL;
break;
}
if((*pp)->val == (*pp)->next->val){
ListNode* tmp = (*pp)->next;
(*pp)->next = tmp->next;
delete tmp;
deleted = true;
}
else if(deleted){
(*pp) = (*pp)->next; //删除重复元素的第一个
deleted = false;
}
else{
pp = &((*pp)->next);
}
}
return head;
}
};