Remove Duplicates from Sorted List II

Tags : linkedlist, leetcode, cpp, medium

Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.

Examples #

Example 1:

Input: head = [1,2,3,3,4,4,5]
Output: [1,2,5]

Example 2:

Input: head = [1,1,1,2,3]
Output: [2,3]

Constraints #

Solutions #

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:

    ListNode* deleteDuplicates(ListNode* head) {
        
        if(!head or !head->next) return head;

        ListNode* t = new ListNode(-501);
        t->next = head;
        head = t;
        
        while(t->next and t->next->next){
            
            if(t->next->val == t->next->next->val){
                
                ListNode* f = t->next;
                
                while(f->next and  f->val == f->next->val)
                    f = f->next;
                t->next = f->next;
                
            }
            else t = t->next;
            
        }
        return head->next;
    }
};