- How to add new element to middle of circular linked list?
class Node:
def __init__(self, data):
self.data = data
self.next = None
class CircularLinkedList:
def __init__(self):
self.head = None
def add_node(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
new_node.next = self.head
else:
current = self.head
while current.next != self.head:
current = current.next
current.next = new_node
new_node.next = self.head
def print_list(self):
if self.head is None:
print("Circular linked list is empty.")
return
current = self.head
while True:
print(current.data, end=' ')
current = current.next
if current == self.head:
break
def get_middle_node(self):
if self.head is None:
return None
slow_ptr = self.head
fast_ptr = self.head
while fast_ptr.next != self.head and fast_ptr.next.next != self.head:
slow_ptr = slow_ptr.next
fast_ptr = fast_ptr.next.next
return slow_ptr
def add_node_to_middle(self, data):
new_node = Node(data)
middle_node = self.get_middle_node()
if middle_node is None:
self.head = new_node
new_node.next = self.head
else:
new_node.next = middle_node.next
middle_node.next = new_node
# Example usage:
cll = CircularLinkedList()
cll.add_node(1)
cll.add_node(2)
cll.add_node(4)
cll.add_node(5)
cll.add_node_to_middle(3)
cll.print_list() # Output: 1 2 3 4 5