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
Given
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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
ListNode *fast = head, *slow = NULL, *last = NULL, *newhead = NULL;
int count = 1;
while (fast) {
if (last && fast->val == last->val) {
++count;
}
else if (last && fast->val != last->val) {
if (count == 1) {
if (!slow) {
slow = last;
newhead = slow;
}
else {
slow->next = last;
slow = slow->next;
}
}
else {
count = 1;
}
}
last = fast;
fast = fast->next;
}
//check if the final node in the original list needs to be added
if (last && slow && last->val != slow->val && count == 1) {
slow->next = last;
slow = slow->next;
}
else if (!slow && last && count == 1) {
//only one node
return last;
}
//close the new list
if (slow) {
slow->next = NULL;
}
return newhead;
}
};
No comments:
Post a Comment