Python program to remove duplicate elements from a Circular Linked List

PythonServer Side ProgrammingProgramming

When it is required to remove duplicates from a circular linked list, a 'Node' class needs to be created. In this class, there are two attributes, the data that is present in the node, and the access to the next node of the linked list.

In a circular linked list, the head and the rear are adjacent to each other. They are connected to form a circle, and don't have 'NULL' value in the last node.

Another class needs to be created that would have an initialization function, and the head of the node would be initialized to 'None'. 

Multiple methods are defined by the user to add node to the linked list, remove duplicates and to print the node values.

Below is a demonstration for the same −

Example

Live Demo

class Node:  
   def __init__(self,data):
      self.data = data
      self.next = None  

class list_creation:  
   def __init__(self):  
      self.head = Node(None)  
      self.tail = Node(None)  
      self.head.next = self.tail  
      self.tail.next = self.head  

   def add_data(self,my_data):  
      new_node = Node(my_data)
      if self.head.data is None:  
         self.head = new_node  
         self.tail = new_node  
         new_node.next = self.head  
      else:  
         self.tail.next = new_node
         self.tail = new_node
         self.tail.next = self.head

   def remove_duplicate_vals(self):  
      curr = self.head
      if(self.head == None):
         print("The list is empty")
      else:
         while(True):
            temp = curr
            index_val = curr.next
            while(index_val != self.head):
               if(curr.data == index_val.data):
                  temp.next = index_val.next
                else:
                  temp = index_val
             index_val= index_val.next
            curr =curr.next
            if(curr.next == self.head):
               break;        
   def print_it(self):  
      curr = self.head
      if self.head is None:  
         print("The list is empty");  
         return;  
      else:
         print(curr.data)
         while(curr.next != self.head):  
            curr = curr.next
            print(curr.data)
         print("\n")

class circular_linked_list:  
   my_cl = list_creation()
   print("Nodes are being added to the list")
   my_cl.add_data(21)
   my_cl.add_data(54)
   my_cl.add_data(78)
   my_cl.add_data(99)
   my_cl.add_data(21)
   print("The list is :")
   my_cl.print_it();  
   my_cl.remove_duplicate_vals()
   print("The updated list is :")
   my_cl.print_it(); 

Output

Nodes are being added to the list
The list is :
21
54
78
99
21

The updated list is :
21
54
78
99

Explanation

  • The 'Node' class is created.
  • Another class with required attributes is created.
  • Another method named 'remove_duplicate_vals' is defined, that is used to remove the duplicate elements present in the linked list.
  • Another method named 'print_it' is defined, that displays the nodes of the circular linked list.
  • An object of the 'list_creation' class is created, and the methods are called on it to add data.
  • An 'init' method is defined, that the first and last nodes of the circular linked list to None.
  • The 'remove_duplicate_vals' method is called.
  • It iterates through the list, and checks to see if any element has been repeated.
  • If that is true, then it is deleted.
  • This is displayed on the console using the 'print_it' method.
raja
Published on 13-Mar-2021 06:10:33
Advertisements