Skip to content
Related Articles

Related Articles

Improve Article

Count nodes in Circular linked list

  • Difficulty Level : Basic
  • Last Updated : 23 Jun, 2021

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. 
 

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.

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 prvar 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

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.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :