Count of Prime Nodes of a Singly Linked List - GeeksforGeeks

29 Oct, 2021
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
 
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++
Java
Python3
C#
Javascript
// C++ implementation to find count of prime numbers// in the singly linked list#include <bits/stdc++.h>using namespace std; // Node of the singly linked liststruct Node {    int data;    Node* next;}; // Function to insert a node at the beginning// of the singly Linked Listvoid 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 primebool 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 listint 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 programint 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 implementation to find count of prime numbers// in the singly linked listclass solution{ // Node of the singly linked liststatic class Node {    int data;    Node  next;} // Function to insert a node at the beginning// of the singly Linked Liststatic 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 primestatic 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 liststatic 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 programpublic 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 implementation to find count of# prime numbers in the singly linked list # Function to check if a number is primedef 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 nodeclass 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 Codeif __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# implementation to find count of prime numbers// in the singly linked listusing System; class GFG{ // Node of the singly linked listpublic class Node{    public int data;    public Node next;} // Function to insert a node at the beginning// of the singly Linked Liststatic 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 primestatic 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 liststatic 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 codepublic 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
<script> // Javascript implementation to find count// of prime numbers in the singly linked list     // Node of the singly linked listclass Node{    constructor(val)    {        this.data = val;        this.next = null;    }} // Function to insert a node at the beginning// of the singly Linked Listfunction push(head_ref, new_data){    var 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 primefunction 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 || n % 3 == 0)        return false;     for(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 listfunction countPrime(head_ref){         var count = 0;    var 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 // Start with the empty listvar head = null; // Create the linked list// 15 . 5 . 6 . 10 . 17head = push(head, 17);head = push(head, 10);head = push(head, 6);head = push(head, 5);head = push(head, 15); // Function call to print require answerdocument.write("Count of prime nodes = " +               countPrime(head)); // This code is contributed by gauravrajput1 </script>
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 
andrew1234
rahul_gfg
rituraj_jain
29AjayKumar
GauravRajput1
ankita_saini
Prime Number
sieve
Linked List
Mathematical
Linked List
Mathematical
Prime Number
sieve
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
LinkedList in Java
Doubly Linked List | Set 1 (Introduction and Insertion)
Linked List vs Array
Delete a Linked List node at a given position
Queue - Linked List Implementation
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7