Doubly Linked List Python

 


class Node:

def __init__(self):
self.info = None
self.prev = None
self.next = None
class doubly_llist:
def __init__(self):
self.start = Node()
self.start = None

def create_list(self, value):
self.s = Node()
self.temp = Node()
self.temp.info = value
self.temp.next = None
if self.start == None:
self.temp.prev = None
self.start = self.temp
else:
self.s = self.start
while self.s.next != None:
self.s = self.s.next
self.s.next = self.temp
self.temp.prev = self.s

def add_begin(self,value):
# if self.start == None:
# print("\nAt first create the list")
# return
self.temp = Node()
self.temp.info = value
self.temp.next = self.start
self.start.prev = self.temp
self.start = self.temp
print("\nElement Inserted")
def add_last(self,value):
if self.start == None:
print("\nAt first create the list")
return
self.p = self.start
i = 0
while self.p.next is not None and i < 10:
self.p = self.p.next
i = i + 1
self.temp = Node()
self.temp.info = value
self.temp.next = None
self.temp.prev = self.p
self.p.next = self.temp

def add_after(self,value,position):
if self.start == None:
print("\nSorry, List is empty.")
return
self.p = Node()
self.temp = Node()
self.p = self.start
for i in range(0,position-1):
self.p = self.p.next
if self.p == None:
print("\nGiven position is higher than the length of
                the list.")
return
self.temp.info = value
if self.p.next == None:
self.p.next = self.temp
self.temp.prev = self.p
self.temp.next = None

else:
self.temp.next = self.p.next
self.temp.next.prev = self.temp
self.p.next = self.temp
self.temp.prev = self.p
print("\nElement Inserted.")


def count_element(self):
self.p = self.start
count = 0
while self.p != None:
self.p = self.p.next
count += 1
print("\n")
print(f"Number of elements are {count}")
def reverse_list(self):
if self.start == None:
print("\nList is empty.")
return

self.p1 = Node()
self.p2 = Node()
self.p1 = self.start
self.p2 = self.p1.next
self.p1.next = None
self.p1.prev = self.p2
while self.p2 != None:
self.p2.prev = self.p2.next
self.p2.next = self.p1
self.p1 = self.p2
self.p2 = self.p2.prev
self.start = self.p1
print("\nList reversed.")
def delete_element(self, value):
# if self.start == None:
# print("\nList is empty.")
# return
self.temp = Node()
if self.start.info == value:
self.temp = self.start
self.start = self.start.next
self.start.prev = None
print("\nElement Deleted.")
del self.temp
return
self.p = Node()
self.p = self.start
while self.p.next.next != None:
if self.p.next.info == value:
self.temp = self.p.next
self.p.next = self.temp.next
self.temp.next.prev = self.p
print("\nElement Deleted.")
del self.temp
return

def display_list(self):
self.q = Node()
if self.start == None:
print("\nList is empty:")
return
self.q = self.start
print("\nThe list is: ")
while self.q is not None:
print(self.q.info,end=' ')
self.q = self.q.next
print("\n")
if __name__ == "__main__":
llist = doubly_llist()
while(True):
print("\n1. Create Node\n2. Insert at beginning\n")
print("3. Insert at Last\n4. Insert after Node\n")
print("5. Delete a Node\n6. Display List\n")
print("7. Count Node\n8. Reverse List\n9. Quit")
choice = int(input("Enter your choice: "))
if choice == 1:
value = int(input("Enter the data for create: "))
llist.create_list(value)
elif choice == 2:
if llist.start == None:
print("\nAt first create the list")
else:
value = int(input("Enter the data for insert at
                                    first: "))
llist.add_begin(value)
elif choice == 3:
if llist.start == None:
print("\nAt first create the list")
else:
value = int(input("Enter the data for insert at
                                    last: "))
llist.add_last(value)
elif choice == 4:
if llist.start == None:
print("\nAt first create the list")
else:
value = int(input("Enter the data for insert after
                                    a node: "))
position = int(input("Enter position of the node: "))
llist.add_after(value, position)
elif choice == 5:
if llist.start == None:
print("\nList is empty")
else:
value = int(input("Enter the element for deletion: "))
llist.delete_element(value)
elif choice == 6:
llist.display_list()
elif choice == 7:
llist.count_element()
elif choice == 8:
llist.reverse_list()
elif choice == 9:
if llist.start != None:
del llist.start
print("\n------>List deleted")
exit()

Comments