Home Linked List Remove duplicates from a sorted linked list.

Remove duplicates from a sorted linked list.

by nikoo28
0 comments 1 minutes read

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.

You may also like

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More