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:
data
, prev
(previous node), and next
(next node).prev
and next
pointers of adjacent nodes and the new node.prev
of the next node and the next
of the previous node to each other.next
for forward traversal and prev
for backward traversal.
No comments:
Post a Comment