Circular Linked List in Python (Example)

 

In this tutorial, you will learn how to create a circular linked list using the Python programming language. A circular linked list is a data structure where each node has a reference to the next node, and the last node’s next pointer points back to the first node, creating a circular structure.

The table of content is structured as follows:

Let’s dive into the implementation!

 

Implementation of Circular Linked List

We’ll start by defining a Node class to represent each node in the circular linked list. Each node will have a value and a pointer to the next node.

class Node:
    def __init__(self, value):
        self.value = value                      # Value stored in the node
        self.next = None                        # Reference to the next node

Next, we’ll define a CircularLinkedList class to encapsulate the circular linked list. This class will have methods to perform various operations on the list, such as inserting at the end, inserting at the beginning, removing a node, and displaying the list.

class CircularLinkedList:
    def __init__(self):
        self.head = None                        # Reference to the first node in the list
 
    def is_empty(self):
        return self.head is None                # Check if the list is empty
 
    def prepend(self, value):
        new_node = Node(value)
        if self.is_empty():
            new_node.next = new_node            # Make the new node circular by pointing to itself
            self.head = new_node
        else:
            new_node.next = self.head           # New node points to the current head
            current = self.head
            while current.next != self.head:
                current = current.next
            current.next = new_node             # Update the last node's next pointer to the new node
            self.head = new_node                # Update the head to the new node
 
    def append(self, value):
        new_node = Node(value)
        if self.is_empty():
            new_node.next = new_node            # Make the new node circular by pointing to itself
            self.head = new_node
        else:
            new_node.next = self.head           # New node points to the current head
            current = self.head
            while current.next != self.head:
                current = current.next
            current.next = new_node             # Update the last node's next pointer to the new node
 
    def remove(self, value):
        if self.is_empty():                     # The list is empty
            return
 
        if self.head.value == value:            # The value is stored in head node
            current = self.head
            while current.next != self.head:
                current = current.next
            if self.head == self.head.next:     # Only one node in the list
                self.head = None
            else:
                current.next = self.head.next
                self.head = self.head.next
            return
 
        current = self.head                     # The value is stored in another node
        while current.next != self.head:
            if current.next.value == value:     # Update the current node's next pointer
                current.next = current.next.next  
                return
            current = current.next
 
    def display(self):
        if self.is_empty():
            print("Circular Linked List is empty.")
            return
 
        current = self.head
        while True:
            print(current.value, end=" ")
            current = current.next
            if current == self.head:
                break
        print()

The detailed explanations for each function in the CircularLinkedList class:

is_empty: Checks if the circular linked list is empty by verifying if the head is None.

prepend: Inserts a new node with the given value at the beginning of the circular linked list. If the list is empty, the new node becomes the head, and it points to itself. Otherwise, the new node’s next pointer is updated to point to the current head, and the last node’s next pointer is updated to the new node. Finally, the head is updated to the new node.

append: Inserts a new node with the given value at the end of the circular linked list. If the list is empty, the new node becomes the head, and it points to itself. Otherwise, the new node’s next pointer is updated to point to the current head, and the last node’s next pointer is updated to the new node.

remove: Removes the first occurrence of a node with the given value from the circular linked list. If the list is empty, or the value is not found, the function returns. If the value is found at the head, special handling is done to update the last node’s next pointer and update the head. Otherwise, the list is traversed until the value is found, and the previous node’s next pointer is updated to skip the node with the given value.

display: Traverses and prints the elements of the circular linked list. It starts from the head and continues until reaching the head again, printing the value of each node.

Example

Now that we have our CircularLinkedList class let’s test it with some examples to see how it performs.

# Create a circular linked list
clist = CircularLinkedList()
 
# Append elements
clist.append(1)
clist.append(2)
clist.append(3)
 
# Display the list
clist.display()  
# 1 2 3
 
# Prepend an element
clist.prepend(0)
 
# Display the list
clist.display()  
# 0 1 2 3
 
# Remove an element
clist.remove(2)
 
# Display the list
clist.display()  
# 0 1 3

In this example, we created a circular linked list, appended elements, prepended an element, and removed an element. The display method is used to print the contents of the list.

That’s it! You now have a basic implementation of a circular linked list in Python. You can extend the CircularLinkedList class with more functionality as needed for your specific use case.

 

Video, Further Resources & Summary

Do you need more explanations on how to define a circular linked list in Python? Then you should have a look at the following YouTube video of the Statistics Globe YouTube channel.

 

The YouTube video will be added soon.

 

Furthermore, you could have a look at some of the other tutorials on Statistics Globe:

This post has shown how to create a circular linked list in Python. In case you have further questions, you may leave a comment below.

 

Ömer Ekiz Informatics Expert

This page was created in collaboration with Ömer Ekiz. You may have a look at Ömer’s author page to read more about his academic background and the other articles he has written for Statistics Globe.

 

Subscribe to the Statistics Globe Newsletter

Get regular updates on the latest tutorials, offers & news at Statistics Globe.
I hate spam & you may opt out anytime: Privacy Policy.


Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.

Top