Site icon DataFlair

Circular Doubly Linked List in DSA Python

Program 1

# Implementation of circular double linked list
import os

class Node:
    def __init__(self):
        self.ladd=None
        self.data=None
        self.radd=None

class CircularDoubleList:
    def __init__(self):
        self.start=None
        self.count=0

    def create(self):
        n=int(input("Enter first element: "))
        self.start=Node()
        self.start.ladd=None
        self.start.data=n
        self.start.radd=None
        temp=self.start
        self.count=self.count+1
        choice=input("Want to continue(y/Y): ")
        choice=choice.lower()
        while(choice=='y'):
            self.count=self.count+1
            n=int(input("Enter next element: "))
            newnode=Node()
            newnode.ladd=None
            newnode.data=n
            newnode.radd=None
            temp.radd=newnode
            newnode.ladd=temp
            temp=temp.radd
            self.start.ladd=newnode
            newnode.radd=self.start
            choice=input("Want to continue(y/Y): ")
            choice=choice.lower()

    def display(self):
        if(self.start==None):
            print("List is empty")
        else:
            temp=self.start
            while(True):
                print(temp.data,end="   ")            
                temp=temp.radd
                if(temp==self.start):
                    break
            print("\n Total Node in list: ",self.count)    


    def insertFirst(self):
        if(self.start==None):
            print("List is empty")
        else:
             self.count=self.count+1
             n=int(input("Enter next element: "))
             newnode=Node()
             newnode.ladd=None
             newnode.data=n
             newnode.radd=None

             last=self.start.ladd
             self.start.ladd=newnode
             newnode.radd=self.start
             self.start=newnode
             self.start.ladd=last
             last.radd=self.start

    def insertMiddle(self):
        if(self.start==None):
            print("List is empty")
        else:
            self.count=self.count+1
            n=int(input("Enter an element: "))
            newnode=Node()
            newnode.ladd=None
            newnode.data=n
            newnode.radd=None
            pos=int(input("Enter poistion of node: "))
            if(pos>self.count):
                print("Poistion is grater than total node: ")
            else:
                i=1
                next=self.start
                while(i<pos):
                    prev=next
                    next=next.radd
                    i=i+1
                prev.radd=newnode
                newnode.ladd=prev
                newnode.radd=next
                next.ladd=newnode                                            
 
    def insertLast(self):
         if(self.start==None):
            print("List is empty")
         else:
            self.count=self.count+1
            n=int(input("Enter an element: "))
            newnode=Node()
            newnode.ladd=None
            newnode.data=n
            newnode.radd=None
            last=self.start.ladd
            last.radd=newnode
            newnode.ladd=last
            self.start.ladd=newnode
            newnode.radd=self.start

      
    def deleteFirst(self):
        if(self.start==None):
            print("List is empty")
        else:
            temp=self.start
            last=self.start.ladd
            self.start=self.start.radd
            
            self.start.ladd=last
            last.radd=self.start
            print(" Deleted node is ",temp.data)
            del temp
            temp=None
            self.count=self.count-1

    def deleteLast(self):
         if(self.start==None):
            print("List is empty")
         else:
            last=self.start.ladd
            prev=last.ladd
            self.start.ladd=prev
            prev.radd=self.start
            print("Deleted node is : ",last.data)
            del last
            last=None
            self.count=self.count-1
    
            
    def deleteMiddle(self):
        if(self.start==None):
            print("List is empty")
        else:
            
            pos=int(input("Enter poistion of node for delete: "))
            if(pos>self.count):
                print("Poistion is grater than total node: ")
            else:
                self.count=self.count-1
                i=1
                next=self.start
                while(i<pos):
                    prev=next
                    next=next.radd
                    i=i+1

                temp=next
                next=next.radd                    

                next.ladd=prev
                prev.radd=next
                print("Deleted node is : ",temp.data)
                del temp
                temp=None            
     
    
        

# Main
os.system('cls')
cdll=CircularDoubleList()
while(1):
    print("\n --------------------DoubleLinked List------------------------")
    print("1. Create")
    print("2. Display")
    print("3. Insert First")
    print("4. Insert Middle")
    print("5. Insert Last")
    print("6. Delete First ")
    print("7. Delete Middle ")
    print("8. Delete Last ")
    print("9. Exit")
    print("---------------------------------------------------------")
    choice=int(input("Enter your choice: "))     
    if(choice==1):
        cdll.create()
    elif(choice==2):
        cdll.display()
    elif(choice==3):
        cdll.insertFirst()    
    elif(choice==4):
        cdll.insertMiddle()
    elif(choice==5):
        cdll.insertLast()
    elif(choice==6):
        cdll.deleteFirst()
    elif(choice==7):
        cdll.deleteMiddle()    
    elif(choice==8):
        cdll.deleteLast()    
    else:
        break

 

Exit mobile version