Friday, August 16, 2024

Doubly Linked List (Answer)

Follow me


Link of DLL Chapter: DLL

Link of DLL Code Question: DLL Code Question



class Node:
    def __init__(self,prev=None,items=None,next=None):
        self.prev=prev
        self.items=items
        self.next=next



class DLL:
    def __init__(self,start=None):
        self.start=start
    def is_empty(self):
        return self.start==None
    def insert_at_start(self,data):
        n=Node(None,data,self.start)
        if not self.is_empty():
            self.start.prev=n
        self.start=n
    def insert_at_last(self,data):
        temp=self.start
        if self.start!=None:
            while temp.next!=None:
                temp=temp.next
        n=Node(temp,data,None)
        if temp==None:
            self.start=n
        else:
            temp.next=n
    def search(self,data):
        temp=self.start
        while temp!=None:
            if temp.items==data:
                return temp
            temp=temp.next
        return None
    def insert_after(self,temp,data):
        if temp!=None:
            n=Node(temp,data,temp.next)
            if temp.next!=None:
                temp.next.prev=n
            temp.next=n
    def print_list(self):
        temp=self.start
        while temp!=None:
            print(temp.items,end=" ")
            temp=temp.next
            print()
    def delete_first(self):
        if self.start is not None:
            self.start=self.start.next
            if self.start!=None:
                self.start.prev=None
    def delete_last(self):
        if self.start is None:
            pass
        elif self.start.next is None:
            self.start=None
        else:
            temp=self.start
            while temp.next is not None:
                temp=temp.next
            temp.prev.next=None
    def delete_item(self,data):
        if self.start is None:
            pass
        else:
            temp=self.start
            while temp is not None:
                if temp.items==data:
                    if temp.next is not None:
                        temp.next.prev=temp.prev
                    if temp.prev is not None:
                        temp.prev.next=temp.next
                    else:
                        self.start=temp.next
                    break
                temp=temp.next
    def __iter__(self):
        return DLLIterator(self.start)
class DLLIterator:
    def __init__(self,start):
        self.current=start
    def __iter__(self):
        return self
    def __next__(self):
        if not self.current:
            raise StopIteration
        data = self.current.items
        self.current=self.current.next
        return data
   
mylist=DLL()
mylist.insert_at_start(20)
mylist.insert_at_last(10)
mylist.insert_after(mylist.search(20),50)
for x in mylist:
    print(x,end=" ")


Tips to do Doubly Linked List:

  • Understand Nodes: Each node has data, prev (previous node), and next (next node).
  • Insertion: Add a new node by updating prev and next pointers of adjacent nodes and the new node.
  • Deletion: Remove a node by linking the prev of the next node and the next of the previous node to each other.
  • Traversal: Move through the list using next for forward traversal and prev for backward traversal.
  • Handle Edge Cases: Ensure proper handling when the list is empty or has only one node.
  • No comments:

    Post a Comment

    Online Calculator

    Follow Me 0 C % / * 7 8 9 - 4 5 6 +...