Question: Given a sorted Linked List. Write a program to remove all the duplicates.
Input: 4 -> 8 -> 8 -> 8 -> 15 -> 16 -> 23 -> 23 -> 42.
Output: 4 -> 8 -> 15 -> 16 -> 23 -> 42
In a sorted Linked List, all the node that are duplicate will be together. To remove duplicates we need to traverse the linked list and if two adjacent nodes have same value, remove one of them. If adjacent node have different value then move forward.
// function to remove the duplicates from a sorted Linked List struct node * removeDuplicatesSorted(struct node * head) { struct node * traveller = head; struct node * temp; while(traveller) { // we need to keep removing the elements till duplicates are found while(traveller -> next) { if(traveller -> data == traveller -> next -> data) { // We need to remove the next node // Assign the next node to a temp temp = traveller -> next; // Assign the next of current node to the next of adjacent node traveller -> next = temp -> next; // Free the temp free(temp); } else break; } // move to the next node traveller = traveller -> next; } return head; }
Time Complexity:- O(n), since we need to traverse the entire list
Space Complexity:- O(1), only one extra space is used.