Circular Linked List

    As we know, a simple linked list is a sequential collection of nodes. Each node has a data value and a pointer variable that holds the address of the next node.

    A circular linked list is similar to a simple linked list . The only difference is the pointer variable of the last node points to the head node of the linked list rather than Null. When the last node’s pointer variable points to the head node, it forms a circular structure; that’s why we call it a circular linked list.

    The interesting thing about the circular linked list is that we can form it using the simple and doubly linked list; all we have to do is point the pointer of the last node to the first node instead of Null.

    Operations on Circular Linked List

    Like a simple and doubly linked list, we can perform basic operations on a circular linked list, and these operations are:

    • Insertion
    • Deletion
    • Traverse

    1. Insertion

    In insertion, we can insert new elements in the circular linked list. We have to perform some extra work when we want to insert an element at the end of a linked list. In the circular linked list, the insertion operation for the insert element at the beginning, middle, and end have some different operation structures.

    2. Deletion

    In deletion, we simply manipulate the pointer value, so instead of pointing to the next element, it points to the element next to the next pointer.

    3. Traverse

    While traversing in a circular linked list, we need to set the base condition, or else we would traverse through it infinitely.

    Advantages and Disadvantages of Circular Linked List

    Here are some advantages and disadvantages of a circular linked list:

    Advantages

    • It is simply a circular structure, so any point on a circle could be a starting point. We can traverse the complete list starting from any point.
    • It often comes into use when we are implementing advanced data structures.
    • With a single node, we can visit any node.

    Disadvantages

    • If there is no base condition to terminate the circular linked list once the traverse is complete, we can be thrown into an infinite loop.
    • It is not easy to reverse the linked list.

    Circular linked List Implementation

    class Node: 
        def __init__(self,data): 
            self.data = data
            self.next = None
    class Linked_List:   
        def __init__(self): 
            self.head = Node(None)
            self.tail = Node(None)
            self.head.next = self.tail
            self.tail.next = self.head
        def append_list(self,data): 
            newNode = Node(data)
            if self.head.data is None: 
                self.head = newNode
                self.tail = newNode
                newNode.next = self.head
            else: 
                self.tail.next = newNode
                self.tail = newNode
                self.tail.next = self.head
        def show(self): 
            current = self.head; 
            if self.head is None: 
                print("List is empty") 
                return 
            else: 
                print("Nodes of the circular linked list: ") 
                print(current.data)
            while(current.next != self.head): 
                current = current.next 
                print(current.data) 
    class CircularLinkedList: 
      c_l = Linked_List() 
      c_l.append_list(1) 
      c_l.append_list(2) 
      c_l.append_list(3) 
      c_l.append_list(4) 
      c_l.show()
    

    Conclusion

    In conclusion, the circular linked list is a fascinating and versatile data structure, offering unique advantages in various computing scenarios. This is the reason for its wide usage. We hope that the aforementioned information proves helpful to you.

    In case of any queries, do let us know in the comment section below.

    Good luck!

    People are also reading: