class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
class DoublyCircularLinkedList:
def __init__(self):
self.head = None
def is_empty(self):
return self.head is None
def append(self, data):
new_node = Node(data)
if self.is_empty():
self.head = new_node
self.head.next = self.head
self.head.prev = self.head
else:
tail = self.head.prev
tail.next = new_node
new_node.prev = tail
new_node.next = self.head
self.head.prev = new_node
def traverse(self):
if self.is_empty():
print("List is empty")
return
current = self.head
while True:
print(current.data, end=' ')
current = current.next
if current == self.head:
break
print()
def remove_last(self):
if self.is_empty():
print("List is empty")
return
if self.head.next == self.head: # Only one node
self.head = None
else:
tail = self.head.prev
second_last = tail.prev
second_last.next = self.head
self.head.prev = second_last
tail.next = tail.prev = None