16.Remove Duplicates from Sorted List

Type I

Given 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.

Example 1:
Input: 1->2->3->3->4->4->5
Output: 1->2->5

Example 2:
Input: 1->1->1->2->3
Output: 2->3

Solution:

class Solution
{
public:
    ListNode *deleteDuplicates(ListNode *head)
    {

        if (head == NULL)
        {
            return head;
        }
        ListNode *p = head->next;
        ListNode *q = head;

        while (p != NULL)
        {
            if (q->val == p->val)
            {
                q->next = p->next;
                p = p->next;
            }
            else
            {
                p = p->next;
                q = q->next;
            }
        }

        return head;
    }
};

Time Complexity: O(n)

Type II:

Given 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.

Solution I: (Using HashSet)

Time Complexity: O(n) , Space Complexity: O(n)

Solution II:

Time Complexity: O(n) , Space Complexity: O(1)

Last updated

Was this helpful?