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
Post a Comment
If you've any doubts, please let me text