Remove Duplicates from Sorted List II
Total Accepted: 58686 Total Submissions: 228299 Difficulty: Medium
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.
Subscribe to see which companies asked this question
这道题其实是没啥的,但是让我更深刻的认识了什么叫做”短路求值“!
/**
* 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) return nullptr;
ListNode* h = new ListNode(-1);
h->next = head;
ListNode* p = head;
ListNode* prev = h;
while(p != nullptr && p->next){ // if u write "p->next" before "p != nullptr",u will get "Runtime Error" in [1,1];
ListNode* Next = p->next;
if(p->val != Next->val){
prev = p;
p = Next;
continue;
}
while(Next != nullptr && p->val == Next->val){//plz see 17th-lines
Next = Next->next;
}
prev->next = Next;
p = Next;
}
return h->next;
}
};