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