Given a singly linked list containing N nodes, the task is to find the sum and product of all nodes from the list which are prime.
Examples:
Input : List = 15 -> 16 -> 6 -> 7 -> 17 Output : Product = 119, Sum = 24 Prime nodes are 7, 17. Input : List = 15 -> 3 -> 4 -> 2 -> 9 Output : Product = 6, Sum = 5
Approach: The idea is to traverse the nodes of the singly linked list one by one and check if the current node is prime or not. Find the sum and product of the data of the nodes which are prime.
Below is the implementation of above idea:
C++
// C++ implementation to find sum and // product of all of prime nodes of // 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) { // allocate node Node* new_node = (Node*) malloc ( sizeof ( struct Node)); // put in the data new_node->data = new_data; // link the old list off the new node new_node->next = (*head_ref); // move the head to point to the new node (*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 sum and product of all // prime nodes of the singly linked list void sumAndProduct(Node* head_ref) { int prod = 1; int sum = 0; Node* ptr = head_ref; // Traverse the linked list while (ptr != NULL) { // if current node is prime, // Find sum and product if (isPrime(ptr->data)) { prod *= ptr->data; sum += ptr->data; } ptr = ptr->next; } cout << "Sum = " << sum << endl; cout << "Product = " << prod; } // Driver program int main() { // start with the empty list Node* head = NULL; // create the linked list // 15 -> 16 -> 7 -> 6 -> 17 push(&head, 17); push(&head, 7); push(&head, 6); push(&head, 16); push(&head, 15); sumAndProduct(head); return 0; } |
Java
// Java implementation to find sum and // product of all of prime nodes of // the singly linked list class GFG { // 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) { // allocate node Node new_node = new Node(); // put in the data new_node.data = new_data; // link the old list off the new node new_node.next = (head_ref); // move the head to point to the new node (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 sum and product of all // prime nodes of the singly linked list static void sumAndProduct(Node head_ref) { int prod = 1 ; int sum = 0 ; Node ptr = head_ref; // Traverse the linked list while (ptr != null ) { // if current node is prime, // Find sum and product if (isPrime(ptr.data)) { prod *= ptr.data; sum += ptr.data; } ptr = ptr.next; } System.out.println( "Sum = " + sum ); System.out.println( "Product = " + prod); } // Driver code public static void main(String args[]) { // start with the empty list Node head = null ; // create the linked list // 15 . 16 . 7 . 6 . 17 head=push(head, 17 ); head=push(head, 7 ); head=push(head, 6 ); head=push(head, 16 ); head=push(head, 15 ); sumAndProduct(head); } } // This code is contributed by Arnab Kundu |
Python
# Python implementation to find sum and # product of all of prime nodes of # the singly linked list # Link list node class Node: def __init__( self , data): self .data = data self . next = next # Function to insert a node at the beginning # of the singly Linked List def push( head_ref, new_data) : # allocate node new_node = Node( 0 ) # put in the data new_node.data = new_data # link the old list off the new node new_node. next = (head_ref) # move the head to point to the new node (head_ref) = new_node return head_ref # 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 = i + 6 return True # Function to find sum and product of all # prime nodes of the singly linked list def sumAndProduct(head_ref) : prod = 1 sum = 0 ptr = head_ref # Traverse the linked list while (ptr ! = None ): # if current node is prime, # Find sum and product if (isPrime(ptr.data)): prod * = ptr.data sum + = ptr.data ptr = ptr. next print ( "Sum = " , sum ) print ( "Product = " , prod) # Driver code # start with the empty list head = None # create the linked list # 15 . 16 . 7 . 6 . 17 head = push(head, 17 ) head = push(head, 7 ) head = push(head, 6 ) head = push(head, 16 ) head = push(head, 15 ) sumAndProduct(head) # This code is contributed by Arnab Kundu |
C#
// C# implementation to find sum and // product of all of prime nodes of // 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) { // allocate node Node new_node = new Node(); // put in the data new_node.data = new_data; // link the old list off the new node new_node.next = (head_ref); // move the head to point to the new node (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 sum and product of all // prime nodes of the singly linked list static void sumAndProduct(Node head_ref) { int prod = 1; int sum = 0; Node ptr = head_ref; // Traverse the linked list while (ptr != null ) { // if current node is prime, // Find sum and product if (isPrime(ptr.data)) { prod *= ptr.data; sum += ptr.data; } ptr = ptr.next; } Console.WriteLine( "Sum = " + sum); Console.WriteLine( "Product = " + prod); } // Driver code public static void Main(String []args) { // start with the empty list Node head = null ; // create the linked list // 15 . 16 . 7 . 6 . 17 head = push(head, 17); head = push(head, 7); head = push(head, 6); head = push(head, 16); head = push(head, 15); sumAndProduct(head); } } // This code is contributed by 29AjayKumar |
Sum = 24 Product = 119
Time Complexity: O(N), where N is the number of nodes in the linked 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.