Count nodes in Circular linked list
Last Updated :
31 Aug, 2024
Improve
Given a circular linked list. The task is to find the length of the linked list, where length is defined as the number of nodes in the linked list.

count nodes in the circular linked list.
Using linear traversal – O(n) time and O(1) space
The idea is to start from the head node and traversing the list until it loops back to the head. Since a circular linked list has no end, the traversal continues until the current node equals the head again. Increment the counter variable during each step of the traversal of nodes. Finally return the count, which represent the count of nodes in circular linked list.
// C++ program to count number of nodes
// in a circular linked list.
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int x) {
data = x;
next = nullptr;
}
};
// Function to count nodes in a given Circular
// linked list
int countNodes(Node* head) {
if (head == nullptr) return 0;
Node* curr = head;
int result = 0;
do {
curr = curr->next;
result++;
} while (curr != head);
return result;
}
int main() {
// Create list: 1->2->3->4->5--->1
Node* head = new Node(1);
head->next = new Node(2);
head->next->next = new Node(3);
head->next->next->next = new Node(4);
head->next->next->next->next = new Node(5);
head->next->next->next->next->next = head;
cout << countNodes(head);
return 0;
}
// C program to count number of nodes
// in a circular linked list.
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
// Function to count nodes in a given Circular
// linked list
int countNodes(struct Node* head) {
if (head == NULL) return 0;
struct Node* curr = head;
int result = 0;
do {
curr = curr->next;
result++;
} while (curr != head);
return result;
}
struct Node* createNode(int new_data) {
struct Node* new_node =
(struct Node*)malloc(sizeof(struct Node));
new_node->data = new_data;
new_node->next = NULL;
return new_node;
}
int main() {
// Create list: 1->2->3->4->5--->1
struct Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(5);
head->next->next->next->next->next = head;
printf("%d", countNodes(head));
return 0;
}
// Java program to count number of nodes
// in a circular linked list
class Node {
int data;
Node next;
Node(int new_data) {
data = new_data;
next = null;
}
}
// Function to count nodes in a given Circular
// linked list
class GfG {
static int countNodes(Node head) {
if (head == null) return 0;
Node curr = head;
int result = 0;
do {
curr = curr.next;
result++;
} while (curr != head);
return result;
}
public static void main(String[] args) {
// Create list: 1->2->3->4->5--->1
Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
head.next.next.next.next.next = head;
System.out.println(countNodes(head));
}
}
# Python3 program to count number of
# nodes in a circular linked list.
class Node:
def __init__(self, data):
self.data = data
self.next = None
# Function to count nodes
# in a given Circular linked list
def countNodes(head):
curr = head
result = 0
# return 0 for empty lists
if (head == None) :
return 0
while True :
curr = curr.next
result = result + 1
if (curr == head):
break
return result
if __name__=='__main__':
# create list: 1->2->3->4->5--->1
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = Node(4)
head.next.next.next.next = Node(5)
head.next.next.next.next.next = head
print(countNodes(head))
// C++ program to count number of nodes
// in a circular linked list
using System;
class Node {
public int Data;
public Node Next;
public Node(int newData) {
Data = newData;
Next = null;
}
}
// Function to count nodes in a given Circular
// linked list
class GfG {
static int CountNodes(Node head) {
if (head == null) return 0;
Node curr = head;
int result = 0;
do {
curr = curr.Next;
result++;
} while (curr != head);
return result;
}
static void Main() {
// Create list: 1->2->3->4->5--->1
Node head = new Node(1);
head.Next = new Node(2);
head.Next.Next = new Node(3);
head.Next.Next.Next = new Node(4);
head.Next.Next.Next.Next = new Node(5);
head.Next.Next.Next.Next.Next = head;
Console.WriteLine(CountNodes(head));
}
}
// JavaScript program to count number
// of nodes in a circular linked list
class Node {
constructor(newData) {
this.data = newData;
this.next = null;
}
}
// Function to count nodes in a
// given Circular linked list
function countNodes(head) {
var curr = head;
var result = 0;
// return 0 for empty lists
if (head == null) return 0;
do {
curr = curr.next;
result++;
} while (curr != head);
return result;
}
// Create list: 1->2->3->4->5--->1
let head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);
head.next.next.next.next.next = head;
console.log(countNodes(head));
Output
5
Time Complexity: O(n), where n is the length of given linked list.
Auxiliary Space: O(1)