• 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