# Count nodes in Circular linked list

• Difficulty Level : Basic
• Last Updated : 10 Jun, 2022

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

 ``

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.