Java Program to Remove Duplicate Elements from a Singly Linked List

In this article we are going to see how we remove duplicate elements from a singly linked list by using Java programming language.

Java Program to Remove Duplicate Elements from a Singly Linked List

Approach:

  • Create a linked list.
  • Add some elements(with duplicates) to it.
  • Print the list.
  • Call the user defined method removeDup( ) that iterates the whole list repeatedly and removes all the duplicate nodes from the list.
  • Display the new list.

Program:

import java.util.*;
// Main class
public class Main
{
    // Class Node that defines the two linked list variables
    class Node
    {
        int data;
        Node nextNode;
        // constructor to create a node
        public Node(int data) 
        {    
            this.data = data;    
            this.nextNode = null;    
        }    
    }

    // Setting the head and end of the node as NULL  
    public Node head = null;    
    public Node tail = null;  

    // Method to remove duplicate elements from a linked list
    public void removeDup() 
    {  
        Node curr = head, index = null, temp = null;  
        if(head == null) 
        {  
            System.out.println("THe linked list is empty");
            return;  
        }  
        else 
        {  
            while(curr != null)
            {  
                //Node temp points to previous node to index.  
                temp = curr;  
                //Index points to the next node
                index = curr.nextNode;  
                while(index != null) 
                {  
                    //If curr node's data is equal to index node's data  
                    if(curr.data == index.data) 
                    {  
                        //If we find a duplicate node it skips the duplicate node by pointing to nextNode node  
                        temp.nextNode = index.nextNode;  
                    }  
                    else 
                    {  
                        //Temp points to the previous node in the index
                        temp = index;  
                    }  
                    index = index.nextNode;  
                }  
                curr = curr.nextNode;  
            }  
        }  
    }

    // method to add a node to the end of the linked list
    public void add(int data)
    {
        Node newNode = new Node(data);
        // Checks if there was any previous node
        if(head==null)
        {
            head = newNode;
            tail = newNode;
        }
        else
        {
            tail.nextNode = newNode;
            tail = newNode;
        }
    }
    
    // Method to display all the nodes of the linked list
    public void show()
    {
        Node curr = head;
        // If the head is pointing to no node then the linked list is empty
        if(head==null)
            System.out.println("Linked List is empty");
        else
        {
            System.out.println("The nodes are:");
            while(curr!=null)
            {
                System.out.print(curr.data+",");
                curr = curr.nextNode;
            }
            System.out.println();
        }
    }

    public static void main(String[] args) 
    {
        // create an object of the main class
        Main ll = new Main();
        // add elements to the linked list
        ll.add(10);
        ll.add(20);
        ll.add(30);
        ll.add(40);
        ll.add(50);
        ll.add(20);
        ll.add(40);
        // display the nodes
        ll.show();
        System.out.println("Removing the duplicate nodes...");
        ll.removeDup();
        // display the nodes
        ll.show();
    }
}
Output:

The nodes are:
10,20,30,40,50,20,40,
Removing the duplicate nodes...
The nodes are:
10,20,30,40,50,

Explore complete java concepts from the Java programming examples and get ready to become a good programmer and crack the java software developer interview with ease.