Skip to content
Related Articles

Related Articles

Count of Prime Nodes of a Singly Linked List

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

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




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

Javascript




<script>
 
// Javascript implementation to find count
// of prime numbers in the singly linked list    
 
// Node of the singly linked list
class Node
{
    constructor(val)
    {
        this.data = val;
        this.next = null;
    }
}
 
// Function to insert a node at the beginning
// of the singly Linked List
function 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 prime
function 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 list
function 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 list
var 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
document.write("Count of prime nodes = " +
               countPrime(head));
 
// This code is contributed by gauravrajput1
 
</script>

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

Auxiliary Space: O(1)
 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!