# Count of Prime Nodes of a Singly Linked List

Given a singly linked list containing N nodes, the task is to find the total count of prime numbers.

Examples:

```Input: List = 15 -> 5 -> 6 -> 10 -> 17
Output: 2
5 and 17 are the prime nodes

Input: List = 29 -> 3 -> 4 -> 2 -> 9
Output: 3
2, 3 and 29 are the prime nodes
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The idea is to traverse the linked list to the end and check if the current node is prime or not. If YES, increment the count by 1 and keep doing the same until all the nodes get traversed.

Below is the implementation of above approach:

## C++

 `// C++ implementation to find count of prime numbers ` `// in the singly linked list ` `#include ` `using` `namespace` `std; ` ` `  `// Node of the singly linked list ` `struct` `Node { ` `    ``int` `data; ` `    ``Node* next; ` `}; ` ` `  `// Function to insert a node at the beginning ` `// of the singly Linked List ` `void` `push(Node** head_ref, ``int` `new_data) ` `{ ` `    ``Node* new_node = ``new` `Node; ` `    ``new_node->data = new_data; ` `    ``new_node->next = (*head_ref); ` `    ``(*head_ref) = new_node; ` `} ` ` `  `// Function to check if a number is prime ` `bool` `isPrime(``int` `n) ` `{ ` `    ``// Corner cases ` `    ``if` `(n <= 1) ` `        ``return` `false``; ` `    ``if` `(n <= 3) ` `        ``return` `true``; ` ` `  `    ``// This is checked so that we can skip ` `    ``// middle five numbers in below loop ` `    ``if` `(n % 2 == 0 || n % 3 == 0) ` `        ``return` `false``; ` ` `  `    ``for` `(``int` `i = 5; i * i <= n; i = i + 6) ` `        ``if` `(n % i == 0 || n % (i + 2) == 0) ` `            ``return` `false``; ` ` `  `    ``return` `true``; ` `} ` ` `  `// Function to find count of prime ` `// nodes in a linked list ` `int` `countPrime(Node** head_ref) ` `{ ` `    ``int` `count = 0; ` `    ``Node* ptr = *head_ref; ` ` `  `    ``while` `(ptr != NULL) { ` `        ``// If current node is prime ` `        ``if` `(isPrime(ptr->data)) { ` `            ``// Update count ` `            ``count++; ` `        ``} ` `        ``ptr = ptr->next; ` `    ``} ` ` `  `    ``return` `count; ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``// start with the empty list ` `    ``Node* head = NULL; ` ` `  `    ``// create the linked list ` `    ``// 15 -> 5 -> 6 -> 10 -> 17 ` `    ``push(&head, 17); ` `    ``push(&head, 10); ` `    ``push(&head, 6); ` `    ``push(&head, 5); ` `    ``push(&head, 15); ` ` `  `    ``// Function call to print require answer ` `    ``cout << ``"Count of prime nodes = "` `         ``<< countPrime(&head); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation to find count of prime numbers  ` `// in the singly linked list  ` `class` `solution ` `{ ` ` `  `// Node of the singly linked list  ` `static` `class` `Node {  ` `    ``int` `data;  ` `    ``Node  next;  ` `} ` ` `  `// Function to insert a node at the beginning  ` `// of the singly Linked List  ` `static` `Node push(Node   head_ref, ``int` `new_data)  ` `{  ` `    ``Node  new_node = ``new` `Node();  ` `    ``new_node.data = new_data;  ` `    ``new_node.next = ( head_ref);  ` `    ``( head_ref) = new_node;  ` `    ``return` `head_ref; ` `}  ` ` `  `// Function to check if a number is prime  ` `static` `boolean` `isPrime(``int` `n)  ` `{  ` `    ``// Corner cases  ` `    ``if` `(n <= ``1``)  ` `        ``return` `false``;  ` `    ``if` `(n <= ``3``)  ` `        ``return` `true``;  ` ` `  `    ``// This is checked so that we can skip  ` `    ``// middle five numbers in below loop  ` `    ``if` `(n % ``2` `== ``0` `|| n % ``3` `== ``0``)  ` `        ``return` `false``;  ` ` `  `    ``for` `(``int` `i = ``5``; i * i <= n; i = i + ``6``)  ` `        ``if` `(n % i == ``0` `|| n % (i + ``2``) == ``0``)  ` `            ``return` `false``;  ` ` `  `    ``return` `true``;  ` `}  ` ` `  `// Function to find count of prime  ` `// nodes in a linked list  ` `static` `int` `countPrime(Node   head_ref)  ` `{  ` `    ``int` `count = ``0``;  ` `    ``Node  ptr =  head_ref;  ` ` `  `    ``while` `(ptr != ``null``) {  ` `        ``// If current node is prime  ` `        ``if` `(isPrime(ptr.data)) {  ` `            ``// Update count  ` `            ``count++;  ` `        ``}  ` `        ``ptr = ptr.next;  ` `    ``}  ` ` `  `    ``return` `count;  ` `}  ` ` `  `// Driver program  ` `public` `static` `void` `main(String args[]) ` `{  ` `    ``// start with the empty list  ` `    ``Node  head = ``null``;  ` ` `  `    ``// create the linked list  ` `    ``// 15 . 5 . 6 . 10 . 17  ` `    ``head=push(head, ``17``);  ` `    ``head=push(head, ``10``);  ` `    ``head=push(head, ``6``);  ` `    ``head=push(head, ``5``);  ` `    ``head=push(head, ``15``);  ` ` `  `    ``// Function call to print require answer  ` `    ``System.out.print( ``"Count of prime nodes = "``+ countPrime(head));  ` ` `  `}  ` `} ` ` `  `// This code is contributed by Arnab Kundu `

## Python3

 `# Python3 implementation to find count of  ` `# prime numbers in the singly linked list ` ` `  `# Function to check if a number is prime  ` `def` `isPrime(n):  ` ` `  `    ``# Corner cases  ` `    ``if` `n <``=` `1``:  ` `        ``return` `False` `    ``if` `n <``=` `3``: ` `        ``return` `True` ` `  `    ``# This is checked so that we can skip  ` `    ``# middle five numbers in below loop  ` `    ``if` `n ``%` `2` `=``=` `0` `or` `n ``%` `3` `=``=` `0``:  ` `        ``return` `False` `     `  `    ``i ``=` `5` `    ``while` `i ``*` `i <``=` `n:  ` `        ``if` `n ``%` `i ``=``=` `0` `or` `n ``%` `(i ``+` `2``) ``=``=` `0``:  ` `            ``return` `False` `        ``i ``+``=` `6` ` `  `    ``return` `True` ` `  `# Link list node ` `class` `Node:  ` `     `  `    ``def` `__init__(``self``, data, ``next``): ` `        ``self``.data ``=` `data ` `        ``self``.``next` `=` `next` `         `  `class` `LinkedList: ` `     `  `    ``def` `__init__(``self``): ` `        ``self``.head ``=` `None` `     `  `    ``# Push a new node on the front of the list.      ` `    ``def` `push(``self``, new_data): ` `        ``new_node ``=` `Node(new_data, ``self``.head) ` `        ``self``.head ``=` `new_node ` ` `  `    ``# Function to find count of prime  ` `    ``# nodes in a linked list  ` `    ``def` `countPrime(``self``):  ` `     `  `        ``count ``=` `0` `        ``ptr ``=` `self``.head  ` `     `  `        ``while` `ptr !``=` `None``:  ` `             `  `            ``# If current node is prime  ` `            ``if` `isPrime(ptr.data):  ` `                 `  `                ``# Update count  ` `                ``count ``+``=` `1` `             `  `            ``ptr ``=` `ptr.``next` `     `  `        ``return` `count  ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"``: ` ` `  `    ``# Start with the empty list ` `    ``linkedlist ``=` `LinkedList() ` ` `  `    ``# create the linked list  ` `    ``# 15 -> 5 -> 6 -> 10 -> 17  ` `    ``linkedlist.push(``17``)  ` `    ``linkedlist.push(``10``)  ` `    ``linkedlist.push(``6``)  ` `    ``linkedlist.push(``5``)  ` `    ``linkedlist.push(``15``)  ` ` `  `    ``# Function call to print require answer  ` `    ``print``(``"Count of prime nodes ="``, ` `           ``linkedlist.countPrime())  ` ` `  `# This code is contributed by Rituraj Jain `

## C#

 `// C# implementation to find count of prime numbers  ` `// in the singly linked list  ` `using` `System; ` ` `  `class` `GFG ` `{ ` ` `  `// Node of the singly linked list  ` `public` `class` `Node  ` `{  ` `    ``public` `int` `data;  ` `    ``public` `Node next;  ` `} ` ` `  `// Function to insert a node at the beginning  ` `// of the singly Linked List  ` `static` `Node push(Node head_ref, ``int` `new_data)  ` `{  ` `    ``Node new_node = ``new` `Node();  ` `    ``new_node.data = new_data;  ` `    ``new_node.next = ( head_ref);  ` `    ``( head_ref) = new_node;  ` `    ``return` `head_ref; ` `}  ` ` `  `// Function to check if a number is prime  ` `static` `bool` `isPrime(``int` `n)  ` `{  ` `    ``// Corner cases  ` `    ``if` `(n <= 1)  ` `        ``return` `false``;  ` `    ``if` `(n <= 3)  ` `        ``return` `true``;  ` ` `  `    ``// This is checked so that we can skip  ` `    ``// middle five numbers in below loop  ` `    ``if` `(n % 2 == 0 || n % 3 == 0)  ` `        ``return` `false``;  ` ` `  `    ``for` `(``int` `i = 5; i * i <= n; i = i + 6)  ` `        ``if` `(n % i == 0 || n % (i + 2) == 0)  ` `            ``return` `false``;  ` ` `  `    ``return` `true``;  ` `}  ` ` `  `// Function to find count of prime  ` `// nodes in a linked list  ` `static` `int` `countPrime(Node head_ref)  ` `{  ` `    ``int` `count = 0;  ` `    ``Node ptr = head_ref;  ` ` `  `    ``while` `(ptr != ``null``)  ` `    ``{  ` `        ``// If current node is prime  ` `        ``if` `(isPrime(ptr.data))  ` `        ``{  ` `            ``// Update count  ` `            ``count++;  ` `        ``}  ` `        ``ptr = ptr.next;  ` `    ``}  ` ` `  `    ``return` `count;  ` `}  ` ` `  `// Driver code  ` `public` `static` `void` `Main(String []args) ` `{  ` `    ``// start with the empty list  ` `    ``Node head = ``null``;  ` ` `  `    ``// create the linked list  ` `    ``// 15 . 5 . 6 . 10 . 17  ` `    ``head=push(head, 17);  ` `    ``head=push(head, 10);  ` `    ``head=push(head, 6);  ` `    ``head=push(head, 5);  ` `    ``head=push(head, 15);  ` ` `  `    ``// Function call to print require answer  ` `    ``Console.Write( ``"Count of prime nodes = "``+ countPrime(head));  ` `}  ` `} ` ` `  `// This code has been contributed by 29AjayKumar `

Output:

```Count of prime nodes = 2
```

Time Complexity: O(N*sqrt(P)), where N is length of the LinkedList and P is the maximum element in the List

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.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.