82. Remove Duplicates from Sorted List II

1. Description

Given the head of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well.

2. Example

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

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

3. Constraints

  • The number of nodes in the list is in the range [0, 300].
  • -100 <= Node.val <= 100
  • The list is guaranteed to be sorted in ascending order.

4. Solutions

My Accepted Solution

n is the number of nodes in m_head
Time complexity: O(n)
Space complexity: O(1)

// Iteration
class Solution {
public:
    // ListNode* deleteDuplicates(ListNode* head)
    ListNode* deleteDuplicates(ListNode* m_head) {
        ListNode* guardHead = new ListNode();
        guardHead->next = m_head;

        for (auto iter = guardHead, nextNode = guardHead->next; iter->next;
             nextNode = nextNode->next) {
            while (nextNode->next && nextNode->val == nextNode->next->val) {
                nextNode = nextNode->next;
            }

            if (iter->next == nextNode) {
                iter = iter->next;
            } else {
                iter->next = nextNode->next;
            }
        }

        return guardHead->next;
    }
};
comments powered by Disqus