Site icon DataFlair

Doubly Linked List in DSA Python

Program 1

# Implementation of double linked list
import os

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

class DoubleLinkedList:
    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
            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(temp!=None):
                print(temp.data,end="---->")            
                temp=temp.radd
            print("\n Total Node in list: ",self.count)                
        
    def reverseDisplay(self):
        if(self.start==None):
            print("List is empty")
        else:
            temp=self.start
            while(temp.radd!=None):
                temp=temp.radd

            while(temp!=None):
                print(temp.data,end="---->")            
                temp=temp.ladd
            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 an element: "))
            newnode=Node()
            newnode.ladd=None
            newnode.data=n
            newnode.radd=None
            self.start.ladd=newnode
            newnode.radd=self.start
            self.start=newnode

        
    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
            while(last.radd!=None):
                last=last.radd

            last.radd=newnode
            newnode.ladd=last
        
    def deleteFirst(self):
        if(self.start==None):
            print("List is empty")
        else:
            self.count=self.count-1
            temp=self.start
            self.start=self.start.radd
            print("Deleted node is : ",temp.data)
            del temp
            temp=None
            
      
    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            

           
    def deleteLast(self):
        if(self.start==None):
            print("List is empty")
        else:
            self.count=self.count-1
            temp=self.start
            while(temp.radd!=None):
                prev=temp
                temp=temp.radd

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


# Main
os.system('cls')
dll=DoubleLinkedList()
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. Count Node ")
    print("10. Display Reverse")
    print("11.Sorting")
    print("12. Exit")
    print("---------------------------------------------------------")
    choice=int(input("Enter your choice: "))     
    if(choice==1):
        dll.create()
    elif(choice==2):
        dll.display()
    elif(choice==3):
        dll.insertFirst()    
    elif(choice==4):
        dll.insertMiddle()
    elif(choice==5):
        dll.insertLast()
    elif(choice==6):
        dll.deleteFirst()
    elif(choice==7):
        dll.deleteMiddle()    
    elif(choice==8):
        dll.deleteLast()    
    elif(choice==9):
        print("Total Node is : ",dll.count)
    elif(choice==10):
        dll.reverseDisplay()
    else:
        break

 

Exit mobile version