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