DOUBLY
DOUBLY
@property
def data(self):
return self.__data
@data.setter
def data(self, data):
self.__data = data
@property
def prev(self):
return self.__prev
@prev.setter
def prev(self, value):
self.__prev = value
@property
def next(self):
return self.__next
@next.setter
def next(self, value):
self.__next = value
class Doubly:
def __init__(self):
self.__head = None
if self.__head is None:
self.__head = new_node
else:
self.__head.prev = new_node
new_node.next = self.__head
self.__head = new_node
if self.__head is None:
self.__head = new_node
else:
current = self.__head
while current.next:
current = current.next
new_node.prev = current
current.next = new_node
if self.__head is None:
print("Linked list is empty.")
return
if self.__head.data == key:
self.__head.prev = new_node
new_node.next = self.__head
self.__head = new_node
return
current = self.__head
if current is None:
print("Key doesn't exist.")
else:
new_node.prev = current.prev
new_node.next = current
current.prev.next = new_node
current.prev = new_node
if self.__head is None:
print("Linked list is empty.")
return
if last_occurrence is None:
print("Key doesn't exist.")
return
if self.__head is None:
print("Linked list is empty.")
return
current = self.__head
if current is None:
print("Key doesn't exist.")
else:
new_node.prev = current
new_node.next = current.next
if current.next:
current.next.prev = new_node
current.next = new_node
if self.__head is None:
print("Linked list is empty.")
return
current = self.__head
last_occurrence = None
while current:
if current.data == key:
last_occurrence = current
current = current.next
if last_occurrence is None:
print("Key doesn't exist.")
return
new_node.prev = last_occurrence
new_node.next = last_occurrence.next
if last_occurrence.next:
last_occurrence.next.prev = new_node
last_occurrence.next = new_node
def delete_beginning(self):
if self.__head is None:
print("Linked List is empty.")
else:
self.__head = self.__head.next
def delete_end(self):
if self.__head is None:
print("Linked List is empty.")
else:
current = self.__head
while current.next:
current = current.next
current.prev.next = None
if self.__head.data == key:
self.__head = self.__head.next
return
current = self.__head
if current is None:
print("Key doesn't exist.")
return
if current.prev:
current.prev.next = current.next
if current.next:
current.next.prev = current.prev
if self.__head.data == key:
self.__head = self.__head.next
return
current = self.__head
last_occurrence = None
while current:
if current.data == key:
last_occurrence = current
current = current.next
if last_occurrence is None:
print("Key doesn't exist.")
return
if last_occurrence.prev:
last_occurrence.prev.next = last_occurrence.next
if last_occurrence.next:
last_occurrence.next.prev = last_occurrence.prev
else:
self.__head.data = data
else:
current = self.__head
while current.next:
current = current.next
current.data = data
if self.__head.data == key:
self.__head.data = data
return
current = self.__head
if current is None:
print("Key doesn't exist.")
else:
current.data = data
if self.__head.data == key:
self.__head.data = data
return
current = self.__head
last_occurrence = None
while current:
if current.data == key:
last_occurrence = current
current = current.next
if last_occurrence is None:
print("Key doesn't exist.")
else:
last_occurrence.data = data
def max(self):
max_value = self.__head.data
current = self.__head
while current:
if current.data > max_value:
max_value = current.data
current = current.next
return max_value
def min(self):
min_value = self.__head.data
current = self.__head
while current:
if current.data < min_value:
min_value = current.data
current = current.next
return min_value
def is_Doubly(self):
current = self.__head
while current:
if current.next and current.next.prev != current:
return False
current = current.next
return True
def display(self):
current = self.__head
while current:
print(current.data, end=" ")
current = current.next
linked_list = Doubly()
linked_list.insert_end(10)
linked_list.insert_end(20)
linked_list.insert_end(15)
linked_list.insert_end(5)
linked_list.insert_beginning(5)
linked_list.insert_before(5, 0)
# linked_list.insert_before_last_occurrence(5, 0)
# linked_list.insert_after(5, 25)
# linked_list.insert_after_last_occurrence(5, 25)
# linked_list.delete_beginning()
# linked_list.delete_end()
# linked_list.delete_specific(5)
# linked_list.delete_specific_last_occurrence(5)
# linked_list.update_beginning("A")
# linked_list.update_end("Z")
# linked_list.update_specific(5, 50)
# linked_list.update_specific_last_occurrence(5, 50)
linked_list.display()