class Node(object):
def __init__(self,d):
self.next_node = None
self.prev_node = None
self.data = d
class DoublyLinkedList(object):
def __init__(self):
self.head = None
self.tail = None
self.size = 0
def add(self,d):
new_node = Node(d)
if self.tail:
self.tail.next_node = new_node
new_node.next_node = None
new_node.prev_node = self.tail
self.tail=new_node
else:
self.head = new_node
self.tail = new_node
new_node.prev_node = None
self.size+=1
def addBeg(self,d):
new_node = Node(d)
current_node = self.head
current_node.prev_node = new_node
new_node.prev_node = None
new_node.next_node = current_node
self.head = new_node
self.size+=1
def add_at(self,d,index):
new_node = Node(d)
previous_node = None
current_node = self.head
i = 0
while i<index and current_node:
previous_node = current_node
current_node = current_node.next_node
i+=1
#once it reaches the desired index
if i==index:
previous_node.next_node = new_node
new_node.prev_node = previous_node
new_node.next_node = current_node
current_node.prev_node = new_node
self.size+=1
return True
else:
return False #list ain't too long
def remove(self,d):
previous_node = None
current_node = self.head
while current_node:
if current_node.data == d:
if previous_node: #the node is somewhere in between
#print(d)
previous_node.next_node = current_node.next_node
if current_node.next_node is None: #deleting last node
current_node.prev_node=None
else:
current_node.next_node.prev_node = previous_node
else:
#it is the first node
self.head = current_node.next_node
current_node.next_node.prev_node = None
self.size -= 1
return True
previous_node = current_node
current_node = current_node.next_node
return False
def search(self,d):
current_node = self.head
while current_node:
if current_node.data == d:
return True
current_node = current_node.next_node
return False
#traverse through the linked list and store the elements in a list
def to_list(self):
lis = []
current_node = self.head
while current_node:
lis.append(current_node.data)
current_node = current_node.next_node
return lis
dll = DoublyLinkedList()
dll.add(40)
dll.add(50)
dll.add(60)
print(dll.to_list())
dll.add(70)
print(dll.to_list())
dll.remove(50)
print(dll.to_list())
dll.remove(70)
print(dll.to_list())
dll.remove(40)
print(dll.to_list())