Home Remove Duplicates from Sorted List
Post
Cancel

LeetCode #83: Remove Duplicates from Sorted List (C/C++).

easy

source: https://leetcode.com/problems/remove-duplicates-from-sorted-list/
C/C++ Solution to LeetCode problem 83. Remove Duplicates from Sorted List.

Problem


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,1,2]
Output: [1,2]

Example 2:

Input: head = [1,1,2,3,3]
Output: [1,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.

Solution


We will use two pointers, one to explore each node, and one to keep tracking of the list and the element that points next.

  • Initialize two pointers at the head.
  • Move one pointer until the current node has a different value from the next node.
  • Move once more this pointer.
  • Point next of the other pointer to the pointer that moved first.
  • Move the pointer.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 * 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) {    
    ListNode *f = head;
    ListNode *b = head;

    while (f) {
      if (f->next && f->val == f->next->val) {
        f = f->next;
        continue;
      }

      f = f->next;
      b->next = f;
      b = b->next;
    }

    return head;
  }
};
This post is licensed under CC BY 4.0 by the author.

Remove Duplicates from Sorted List II

Partition List