Grokking Data Structures & Algorithms for Coding Interviews
Vote

0% completed

Problem 2: Remove Duplicates from Sorted List (easy)

Problem Statement:

Given a sorted linked list, remove all the duplicate elements to leave only distinct numbers. The linked list should remain sorted, and the modified list should be returned.

Examples

Example 1:

  • Input: 1 -> 1 -> 2
  • Output: 1 -> 2
  • Justification: Since 1 is repeated, we remove the duplicate to leave a sorted list of unique numbers.

Example 2:

  • Input: 1 -> 2 -> 2 -> 3
  • Output: 1 -> 2 -> 3
  • Justification: Here, 2 is the duplicate element, and by removing it, we obtain a list containing only distinct elements.

.....

.....

.....

Like the course? Get enrolled and start learning!
senthil kumar

senthil kumar

· 2 years ago

Kindly add the main method and print method to avoid confusion and add clarity.

public void printList(ListNode head) {
    ListNode current = head;
    while (current != null) {
        System.out.print(current.val + " ");
        current = current.next;
    }
    System.out.println();
}

public static void main(String[] args) {
    Solution solution = new Solution();
    
    // Test Example 1
    ListNode head1 = new ListNode(1, new ListNode(1, new ListNode(2)));
    ListNode result1 = solution.deleteDuplicates(head1); // Expected: 1 -> 2
    solution.printList(result1);

    // Test Example 2
    ListNode head2 = new ListNode(1, new ListNode(2, new ListNode(2, new ListNode(3))));
    ListNode result2 = solution
D

Daven L

· 2 years ago

class Solution: def deleteDuplicates(self, head): # so I dont lose my original head, I set a variable current current = head # traverse through LL, ensuring curr and curr.next exist while current and current.next is not None: # prev becomes the value to which we compare other values to prev = current current = current.next # we move current until current.val no longer matches prev value # ensure we don't hit None by checking that current also exists while current and prev.val == current.val: current = current.next # whether current is now None or some number that is not prev.val, we set prev.next prev.next = current return
Divyanshu Varma

Divyanshu Varma

· a year ago

/* * We should delete unused bypassed nodes otherwise * if you had n nodes to begin with and deleted m nodes * you will still be consuming n nodes worth of memory. */ ListNode* deleteDuplicates(ListNode* head) { if(!head or !head->next) { // base case return head; } auto curr = head, ahead = head->next; // adjacent nodes while(ahead) { if(curr->val == ahead->val) { auto temp = ahead; curr->next = ahead->next; // skip duplicate ahead = ahead->next; delete temp; // delete unused node } else { curr = curr->next; ahead = ahead->next; } } return head; }