Python program to insert a new node at the beginning of the Circular Linked List

bookmark

#Represents the node of list.    
class Node:    
  def __init__(self,data):    
    self.data = data;    
    self.next = None;    
     
class CreateList:    
  #Declaring head and tail pointer as null.    
  def __init__(self):    
    self.head = Node(None);    
    self.tail = Node(None);    
    self.head.next = self.tail;    
    self.tail.next = self.head;    
        
  #This function will add at the start of the list.    
  def addAtStart(self,data):    
    newNode = Node(data);    
    #Checks if the list is empty.    
    if self.head.data is None:    
      #If list is empty, both head and tail would point to new node.    
      self.head = newNode;    
      self.tail = newNode;    
      newNode.next = self.head;    
    else:    
        #Store data into temporary node    
        temp = self.head;    
        #New node will point to temp as next node    
        newNode.next = temp;    
        #New node will be the head node    
        self.head = newNode;    
        #Since, it is circular linked list tail will point to head.    
        self.tail.next = self.head;    
     
  #Displays all the nodes in the list    
  def display(self):    
    current = self.head;    
    if self.head is None:    
      print("List is empty");    
      return;    
    else:    
        print("Adding nodes to the start of the list: ");    
        #Prints each node by incrementing pointer.    
        print(current.data),    
        while(current.next != self.head):    
            current = current.next;    
            print(current.data),    
        print("\n");    
     
class CircularLinkedList:    
  cl = CreateList();    
      
  #Adding 1 to the list    
  cl.addAtStart(1);    
  cl.display();    
  #Adding 2 to the list    
  cl.addAtStart(2);    
  cl.display();    
  #Adding 3 to the list    
  cl.addAtStart(3);    
  cl.display();    
  #Adding 4 to the list    
  cl.addAtStart(4);    
  cl.display();    


Output:

Adding nodes to the start of the list: 
1
Adding nodes to the start of the list: 
2 1
Adding nodes to the start of the list: 
3 2 1
Adding nodes to the start of the list: 
4 3 2 1