# singly linked list
class Node:
def __init__(self,data):
self.data = data
self.prev = None
self.next = None
class dl:
def __init__(self):
self.head = None
self.tail = None
def is_empty(self):
return self.head is None
def insertb(self,value):
new_node = Node(value)
if self.is_empty():
self.head = self.tail = new_node
else:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
def inserte(self,value):
new_node = Node(value)
if self.is_empty():
self.head = self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
def forward(self):
current = self.head
while current:
if current.data != None:
print(current.data,'<->',end='')
current = current.next
print()
def backward(self):
current = self.tail
while current:
if current.data != None:
print(current.data,'<->',end='')
current = current.prev
print()
def delete(self,value):
current = self.head
while current:
if current.data != None and current.data == value:
current.data = None
current = current.next
print("deleted...")
self.forward()
self.backward()
self.size()
def update(self,value,replace):
current = self.head
while current:
if current.data != None and current.data == value:
current.data = replace
current = current.next
print("updated...")
self.forward()
self.backward()
def size(self):
current = self.head
size=0
while current:
if current.data != None :
size += 1
current = current.next
print(f"size is {size}...!")
l = dl()
l.insertb(1)
l.insertb(2)
l.insertb(3)
l.inserte(4)
l.inserte(5)
l.delete(1)
l.update(2,22)