Given a singly linked list containing N nodes, the task is to find the minimum and maximum prime number.
Examples:
Input : List = 15 -> 16 -> 6 -> 7 -> 17 Output : Minimum : 7 Maximum : 17 Input : List = 15 -> 3 -> 4 -> 2 -> 9 Output : Minimum : 2 Maximum : 3
Approach:
- The idea is to traverse the linked list to the end and initialize the max and min variable to INT_MIN and INT_MAX respectively.
- Check if the current node is prime or not. If Yes:
- If current node’s value is greater than max then assign current node’s value to max.
- If current node’s value is less than min then assign current node’s value to min.
- Repeat above step until end of list is reached.
Below is the implementation of above idea:
C++
// C++ implementation to find minimum // and maximum prime number 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) { 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 maximum and minimum // prime nodes in a linked list void minmaxPrimeNodes(Node** head_ref) { int minimum = INT_MAX; int maximum = INT_MIN; Node* ptr = *head_ref; while (ptr != NULL) { // If current node is prime if (isPrime(ptr->data)) { // Update minimum minimum = min(minimum, ptr->data); // Update maximum maximum = max(maximum, ptr->data); } ptr = ptr->next; } cout << "Minimum : " << minimum << endl; cout << "Maximum : " << maximum << endl; } // 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); minmaxPrimeNodes(&head); return 0; } |
Java
// Java implementation to find minimum // and maximum prime number 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) { 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 maximum and minimum // prime nodes in a linked list static void minmaxPrimeNodes(Node head_ref) { int minimum = Integer.MAX_VALUE; int maximum = Integer.MIN_VALUE; Node ptr = head_ref; while (ptr != null ) { // If current node is prime if (isPrime(ptr.data)) { // Update minimum minimum = Math.min(minimum, ptr.data); // Update maximum maximum = Math.max(maximum, ptr.data); } ptr = ptr.next; } System.out.println( "Minimum : " + minimum ); System.out.println( "Maximum : " + maximum ); } // 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 ); minmaxPrimeNodes(head); } } // This code is contributed by Arnab Kundu |
Python3
# Python3 implementation to find minimum # and maximum prime number of # the singly linked list # Structure of a Node class Node: def __init__( self , data): self .data = data self . next = None # Function to insert a node at the beginning # of the singly Linked List def push(head_ref, new_data) : new_node = Node( 0 ) 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 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 maximum and minimum # prime nodes in a linked list def minmaxPrimeNodes(head_ref) : minimum = 999999999 maximum = - 999999999 ptr = head_ref while (ptr ! = None ): # If current node is prime if (isPrime(ptr.data)): # Update minimum minimum = min (minimum, ptr.data) # Update maximum maximum = max (maximum, ptr.data) ptr = ptr. next print ( "Minimum : " , minimum) print ( "Maximum : " , maximum) # 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 ) minmaxPrimeNodes(head) # This code is contributed by Arnab Kundu |
C#
// C# implementation to find minimum // and maximum prime number 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) { 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 maximum and minimum // prime nodes in a linked list static void minmaxPrimeNodes(Node head_ref) { int minimum = int .MaxValue; int maximum = int .MinValue; Node ptr = head_ref; while (ptr != null ) { // If current node is prime if (isPrime(ptr.data)) { // Update minimum minimum = Math.Min(minimum, ptr.data); // Update maximum maximum = Math.Max(maximum, ptr.data); } ptr = ptr.next; } Console.WriteLine( "Minimum : " + minimum); Console.WriteLine( "Maximum : " + maximum); } // Driver code public static void Main() { // 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); minmaxPrimeNodes(head); } } // This code is contributed by Princi Singh |
Javascript
<script> // javascript implementation to find minimum // and maximum prime number of // 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 maximum and minimum // prime nodes in a linked list function minmaxPrimeNodes(head_ref) { var minimum = Number.MAX_VALUE; var maximum = Number.MIN_VALUE; var ptr = head_ref; while (ptr != null ) { // If current node is prime if (isPrime(ptr.data)) { // Update minimum minimum = Math.min(minimum, ptr.data); // Update maximum maximum = Math.max(maximum, ptr.data); } ptr = ptr.next; } document.write( "Minimum : " + minimum); document.write( "<br/>Maximum : " + maximum); } // Driver code // start with the empty list var 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); minmaxPrimeNodes(head); // This code contributed by umadevi9616 </script> |
Minimum : 7 Maximum : 17
Time Complexity: O(N), where N is the number of nodes in the linked list.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!