Skip to content
Related Articles

Related Articles

Count nodes in Circular linked list

View Discussion
Improve Article
Save Article
  • Difficulty Level : Basic
  • Last Updated : 27 Jul, 2022
View Discussion
Improve Article
Save Article

Given a circular linked list, count the number of nodes in it. For example, the output is 5 for the below list. 

We use the concept used in Circular Linked List | Set 2 (Traversal). While traversing, we keep track of the count of nodes. 

Complete Interview Preparation - GFG

C++




// C++  program to count number of nodes in a circular
// linked list.
#include <bits/stdc++.h>
using namespace std;
  
/*structure for a node*/
  
struct Node {
    int data;
    Node* next;
    Node(int x)
    {
        data = x;
        next = NULL;
    }
};
/* Function to insert a node at the beginning
of a Circular linked list */
struct Node* push(struct Node* last, int data)
{
    if (last == NULL) {
        struct Node* temp
            = (struct Node*)malloc(sizeof(struct Node));
  
        // Assigning the data.
        temp->data = data;
        last = temp;
        // Note : list was empty. We link single node
        // to itself.
        temp->next = last;
  
        return last;
    }
  
    // Creating a node dynamically.
    struct Node* temp
        = (struct Node*)malloc(sizeof(struct Node));
  
    // Assigning the data.
    temp->data = data;
  
    // Adjusting the links.
    temp->next = last->next;
    last->next = temp;
  
    return last;
}
  
/* Function to  count  nodes in a given Circular
linked list */
  
int countNodes(Node* head)
{
    Node* temp = head;
    int result = 0;
    if (head != NULL) {
        do {
            temp = temp->next;
            result++;
        } while (temp != head);
    }
  
    return result;
}
  
/* Driver program to test above functions */
int main()
{
    /* Initialize lists as empty */
    Node* head = NULL;
    head = push(head, 12);
    head = push(head, 56);
    head = push(head, 2);
    head = push(head, 11);
    cout << countNodes(head);
    return 0;
}
  
// This code is contributed by anushikaseth

C




// C program to count number of nodes in a circular linked
// list.
#include <stdio.h>
#include <stdlib.h>
  
/*structure for a node*/
typedef struct Node {
    int data;
    struct Node* next;
} Node;
  
/* Function to insert a node at the beginning of a Circular
   linked list */
void push(Node** head_ref, int data)
{
    Node* ptr1 = (Node*)malloc(sizeof(Node));
    Node* temp = *head_ref;
    ptr1->data = data;
    ptr1->next = *head_ref;
  
    /* If linked list is not NULL then set the next of last
     * node */
    if (*head_ref != NULL) {
        while (temp->next != *head_ref)
            temp = temp->next;
        temp->next = ptr1;
    }
    else
        ptr1->next = ptr1; /*For the first node */
    *head_ref = ptr1;
}
  
/* Function to  count  nodes in a given Circular
linked list */
  
int countNodes(Node* head)
{
    Node* temp = head;
    int result = 0;
    if (head != NULL) {
        do {
            temp = temp->next;
            result++;
        } while (temp != head);
    }
  
    return result;
}
  
/* Driver program to test above functions */
int main()
{
    /* Initialize lists as empty */
    Node* head = NULL;
    push(&head, 12);
    push(&head, 56);
    push(&head, 2);
    push(&head, 11);
    printf("%d", countNodes(head));
    return 0;
}
  
// This code is contributed by Aditya Kumar (adityakumar129)

Java




// Java program to count number of nodes in 
// a circular linked list. 
class GFG
{
  
/* ure for a node */
static class Node
    int data; 
    Node next; 
}; 
  
/* Function to insert a node at the beginning 
of a Circular linked list */
static Node push( Node head_ref, int data) 
    Node ptr1 = new Node(); 
    Node temp = head_ref; 
    ptr1.data = data; 
    ptr1.next = head_ref; 
  
    /* If linked list is not null then set 
    the next of last node */
    if (head_ref != null)
    
        while (temp.next != head_ref) 
            temp = temp.next; 
        temp.next = ptr1; 
    } else
        ptr1.next = ptr1; /*For the first node */
  
    head_ref = ptr1;
    return head_ref;
  
/* Function to print nodes in a given Circular 
linked list */
static int countNodes( Node head) 
    Node temp = head; 
    int result = 0
    if (head != null)
    
        do 
        
            temp = temp.next; 
            result++; 
        } while (temp != head); 
    
  
    return result; 
  
/* Driver program to test above functions */
public static void main(String args[])
    /* Initialize lists as empty */
    Node head = null
    head = push(head, 12); 
    head = push(head, 56); 
    head = push(head, 2); 
    head = push(head, 11); 
  
    System.out.printf("%d", countNodes(head)); 
}
  
// This code is contributed by Arnab Kundu

Python3




# Python3 program to count number of nodes in
# a circular linked list.
  
# structure for a node
class Node: 
    def __init__(self, data): 
        self.data = data 
        self.next = None
  
# Function to insert a node at the beginning
# of a Circular linked list */
def push(head_ref,data):
  
    ptr1 = Node(0)
    temp = head_ref
    ptr1.data = data
    ptr1.next = head_ref
  
    # If the linked list is not None then set
    # the next of last node 
    if (head_ref != None) :
        while (temp.next != head_ref):
            temp = temp.next
        temp.next = ptr1
    else:
        ptr1.next = ptr1 #For the first node */
  
    head_ref = ptr1
    return head_ref
  
# Function to print nodes 
# in a given Circular linked list 
def countNodes(head):
  
    temp = head
    result = 0
    if (head != None) :
        while True :
            temp = temp.next
            result = result + 1
            if (temp == head):
                break
      
    return result
  
# Driver Code 
if __name__=='__main__'
  
    # Initialize lists as empty */
    head = None
    head = push(head, 12)
    head = push(head, 56)
    head = push(head, 2)
    head = push(head, 11)
  
    print( countNodes(head))
      
# This code is contributed by Arnab Kundu

C#




// C# program to count number of nodes in 
// a circular linked list. 
using System;
  
class GFG 
  
/* structure for a node */
public class Node 
    public int data; 
    public Node next; 
}; 
  
/* Function to insert a node at the beginning 
of a Circular linked list */
static Node push( Node head_ref, int data) 
    Node ptr1 = new Node(); 
    Node temp = head_ref; 
    ptr1.data = data; 
    ptr1.next = head_ref; 
  
    /* If linked list is not null then set 
    the next of last node */
    if (head_ref != null
    
        while (temp.next != head_ref) 
            temp = temp.next; 
        temp.next = ptr1; 
    } else
        ptr1.next = ptr1; /*For the first node */
  
    head_ref = ptr1; 
    return head_ref; 
  
/* Function to print nodes in a given Circular 
linked list */
static int countNodes( Node head) 
    Node temp = head; 
    int result = 0; 
    if (head != null
    
        do
        
            temp = temp.next; 
            result++; 
        } while (temp != head); 
    
  
    return result; 
  
/* Driver code */
public static void Main(String []args) 
    /* Initialize lists as empty */
    Node head = null
    head = push(head, 12); 
    head = push(head, 56); 
    head = push(head, 2); 
    head = push(head, 11); 
  
    Console.Write( countNodes(head)); 
  
// This code is contributed by Arnab Kundu 

Javascript




<script>
// javascript program to count number of nodes in 
// a circular linked list.     /* ure for a node */
class Node {
    constructor() {
        this.data = 0;
        this.next = null;
    }
}
    /*
     * Function to insert a node at the beginning of a Circular linked list
     */
    function push(head_ref , data) {
    var ptr1 = new Node();
    var temp = head_ref;
        ptr1.data = data;
        ptr1.next = head_ref;
  
        /*
         * If linked list is not null then set the next of last node
         */
        if (head_ref != null) {
            while (temp.next != head_ref)
                temp = temp.next;
            temp.next = ptr1;
        } else
            ptr1.next = ptr1; /* For the first node */
  
        head_ref = ptr1;
        return head_ref;
    }
  
    /*
     * Function to print nodes in a given Circular linked list
     */
    function countNodes(head) {
    var temp = head;
        var result = 0;
        if (head != null) {
            do {
                temp = temp.next;
                result++;
            } while (temp != head);
        }
  
        return result;
    }
  
    /* Driver program to test above functions */
      
        /* Initialize lists as empty */
        var head = null;
        head = push(head, 12);
        head = push(head, 56);
        head = push(head, 2);
        head = push(head, 11);
  
        document.write(countNodes(head));
  
// This code contributed by umadevi9616
</script>

Output

4

Time Complexity: O(n), As we are visiting every node just once.
Auxiliary Space: O(1), As constant extra space is used

This article is contributed by Rishabh jain. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!