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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (head == NULL)
return head;
ListNode *pre = NULL;
ListNode *pivot = head;
ListNode *current = head;
ListNode * newHead = NULL;
bool first = true;
while (current->next){
current = current->next;
if (current->val != pivot->val){
if (pre==NULL){
if (first == true){
newHead = pivot;
pre= pivot;
}
pivot = current;
first = true;
}
else{
if (first == true){
pre->next = pivot;
pre = pivot;
}
pivot = current;
first = true;
}
}
else
first = false;
}
if (pre){
if (first == true){
pre->next = current;
pre = current;
}
pre->next = NULL;
}
else{
if (first == true)
newHead = current;
}
return newHead;
}
};