Open In App

Find smallest and largest elements in singly linked list

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Given a singly linked list of n nodes and find the smallest and largest elements in linked list.

Examples: 

Input : 15 14 13 22 17
Output : Linked list are:
        17 -> 22 -> 13 -> 14 -> 15 -> NULL
        Maximum element in linked list: 22
        Minimum element in linked list: 13

Input : 20 25 23 68 54 13 45
Output : Linked list are:
        45 -> 13 -> 54 -> 68 -> 23 -> 25 -> 20 -> NULL
        Maximum element in linked list: 68
        Minimum element in linked list: 13

The idea is to traverse the linked list while head not equal to NULL and initialise the max and min variable to INT_MIN and INT_MAX respectively. After that check a condition that if max value is less then head value is assigned to max or min value is greater then head value is assigned to min otherwise head point to next node. Continue this process until head not equal to NULL. 
 

C++




// C++ Program to find smallest and largest
// elements in singly linked list.
#include <bits/stdc++.h>
  
using namespace std;
/* Linked list node */
struct Node {
    int data;
    struct Node* next;
};
  
// Function that returns the largest element
// from the linked list.
int largestElement(struct Node* head)
{
    // Declare a max variable and initialize
    // it with INT_MIN value.
    // INT_MIN is integer type and its value
    // is -32767 or less.
    int max = INT_MIN;
  
    // Check loop while head not equal to NULL
    while (head != NULL) {
  
        // If max is less than head->data then
        // assign value of head->data to max
        // otherwise node point to next node.
        if (max < head->data)
            max = head->data;
        head = head->next;
    }
    return max;
}
  
// Function that returns smallest element
// from the linked list.
int smallestElement(struct Node* head)
{
    // Declare a min variable and initialize
    // it with INT_MAX value.
    // INT_MAX is integer type and its value
    // is 32767 or greater.
    int min = INT_MAX;
  
    // Check loop while head not equal to NULL
    while (head != NULL) {
  
        // If min is greater than head->data then
        // assign value of head->data to min
        // otherwise node point to next node.
        if (min > head->data)
            min = head->data;
  
        head = head->next;
    }
    return min;
}
  
// Function that push the element in linked list.
void push(struct Node** head, int data)
{
    // Allocate dynamic memory for newNode.
    struct Node* newNode = 
         (struct Node*)malloc(sizeof(struct Node));
  
    // Assign the data into newNode.
    newNode->data = data;
  
    // newNode->next assign the address of
    // head node.
    newNode->next = (*head);
  
    // newNode become the headNode.
    (*head) = newNode;
}
  
// Display linked list.
void printList(struct Node* head)
{
    while (head != NULL) {
        printf("%d -> ", head->data);
        head = head->next;
    }
    cout << "NULL" << endl;
}
  
// Driver program to test the functions
int main()
{
    // Start with empty list
    struct Node* head = NULL;
  
    // Using push() function to construct
    // singly linked list
    // 17->22->13->14->15
    push(&head, 15);
    push(&head, 14);
    push(&head, 13);
    push(&head, 22);
    push(&head, 17);
    cout << "Linked list is : " << endl;
  
    // Call printList() function to display
    // the linked list.
    printList(head);
    cout << "Maximum element in linked list:";
  
    // Call largestElement() function to get largest
    // element in linked list.
    cout << largestElement(head) << endl;
    cout << "Minimum element in linked list:";
  
    // Call smallestElement() function to get smallest
    // element in linked list.
    cout << smallestElement(head) << endl;
  
    return 0;
}


Java




// Java program to find smallest and largest 
// elements in singly linked list. 
class GfG 
      
/* Linked list node */
static class Node
    int data; 
    Node next; 
}
static Node head = null;
  
// Function that returns the largest element 
// from the linked list. 
static int largestElement(Node head) 
      
    // Declare a max variable and initialize 
    // it with INT_MIN value. 
    // INT_MIN is integer type and its value 
    // is -32767 or less. 
    int max = Integer.MIN_VALUE; 
  
    // Check loop while head not equal to NULL 
    while (head != null)
    
  
        // If max is less than head->data then 
        // assign value of head->data to max 
        // otherwise node point to next node. 
        if (max < head.data) 
            max = head.data; 
        head = head.next; 
    
    return max; 
  
// Function that returns smallest element 
// from the linked list. 
static int smallestElement(Node head) 
      
    // Declare a min variable and initialize 
    // it with INT_MAX value. 
    // INT_MAX is integer type and its value 
    // is 32767 or greater. 
    int min = Integer.MAX_VALUE; 
  
    // Check loop while head not equal to NULL 
    while (head != null
    
  
        // If min is greater than head->data then 
        // assign value of head->data to min 
        // otherwise node point to next node. 
        if (min > head.data) 
            min = head.data; 
  
        head = head.next; 
    
    return min; 
  
// Function that push the element in linked list. 
static void push(int data) 
    // Allocate dynamic memory for newNode. 
    Node newNode = new Node(); 
  
    // Assign the data into newNode. 
    newNode.data = data; 
  
    // newNode->next assign the address of 
    // head node. 
    newNode.next = (head); 
  
    // newNode become the headNode. 
    (head) = newNode; 
  
// Display linked list. 
static void printList(Node head) 
    while (head != null) { 
        System.out.print(head.data + " -> "); 
        head = head.next; 
    
    System.out.println("NULL"); 
  
// Driver  code
public static void main(String[] args) 
    // Start with empty list 
    // head = new Node(); 
  
    // Using push() function to construct 
    // singly linked list 
    // 17->22->13->14->15 
    push( 15); 
    push( 14); 
    push( 13); 
    push( 22); 
    push( 17); 
    System.out.println("Linked list is : ") ;
  
    // Call printList() function to  
    // display the linked list. 
    printList(head); 
    System.out.print("Maximum element in linked list: "); 
  
    // Call largestElement() function to get 
    // largest element in linked list. 
    System.out.println(largestElement(head)); 
    System.out.print("Minimum element in linked list: "); 
  
    // Call smallestElement() function to get  
    // smallest element in linked list. 
    System.out.print(smallestElement(head)); 
}
  
// This code is contributed by Prerna saini.


Python




# Python3 program to find smallest and largest 
# elements in singly linked list. 
  
# Linked list node 
class Node:
  
    def __init__(self):
        self.data = None
        self.next = None
  
head = None
  
# Function that returns the largest element 
# from the linked list. 
def largestElement(head): 
  
    # Declare a max variable and initialize 
    # it with INT_MIN value. 
    # INT_MIN is integer type and its value 
    # is -32767 or less. 
    max = -32767
  
    # Check loop while head not equal to None 
    while (head != None):
      
        # If max is less than head.data then 
        # assign value of head.data to max 
        # otherwise node point to next node. 
        if (max < head.data) :
            max = head.data 
        head = head.next
      
    return max
  
# Function that returns smallest element 
# from the linked list. 
def smallestElement(head): 
  
    # Declare a min variable and initialize 
    # it with INT_MAX value. 
    # INT_MAX is integer type and its value 
    # is 32767 or greater. 
    min = 32767
  
    # Check loop while head not equal to None 
    while (head != None) :
      
        # If min is greater than head.data then 
        # assign value of head.data to min 
        # otherwise node point to next node. 
        if (min > head.data) :
            min = head.data 
        head = head.next
      
    return min
  
# Function that push the element in linked list. 
def push( data) :
  
    global head
  
    # Allocate dynamic memory for newNode. 
    newNode = Node() 
  
    # Assign the data into newNode. 
    newNode.data = data 
  
    # newNode.next assign the address of 
    # head node. 
    newNode.next = (head) 
  
    # newNode become the headNode. 
    (head) = newNode 
  
# Display linked list. 
def printList( head) :
  
    while (head != None) :
        print(head.data ,end= " -> "
        head = head.next
      
    print("None"
  
# Driver code
  
# Start with empty list 
# head = new Node() 
  
# Using push() function to construct 
# singly linked list 
# 17.22.13.14.15 
push( 15
push( 14
push( 13
push( 22
push( 17
print("Linked list is : "
  
# Call printList() function to 
# display the linked list. 
printList(head) 
print("Maximum element in linked list: ",end="") 
  
# Call largestElement() function to get 
# largest element in linked list. 
print(largestElement(head)) 
print("Minimum element in linked list: ",end="") 
  
# Call smallestElement() function to get 
# smallest element in linked list. 
print(smallestElement(head),end="") 
  
# This code is contributed by Arnab Kundu


C#




// C# program to find smallest and largest 
// elements in singly linked list. 
using System;
      
class GfG 
  
    /* Linked list node */
    class Node
    
        public int data; 
        public Node next; 
    }
    static Node head = null;
  
    // Function that returns the largest element 
    // from the linked list. 
    static int largestElement(Node head) 
    
  
        // Declare a max variable and initialize 
        // it with INT_MIN value. 
        // INT_MIN is integer type and its value 
        // is -32767 or less. 
        int max = int.MinValue; 
  
        // Check loop while head not equal to NULL 
        while (head != null)
        
  
            // If max is less than head->data then 
            // assign value of head->data to max 
            // otherwise node point to next node. 
            if (max < head.data) 
                max = head.data; 
            head = head.next; 
        
        return max; 
    
  
    // Function that returns smallest element 
    // from the linked list. 
    static int smallestElement(Node head) 
    
  
        // Declare a min variable and initialize 
        // it with INT_MAX value. 
        // INT_MAX is integer type and its value 
        // is 32767 or greater. 
        int min = int.MaxValue; 
  
        // Check loop while head not equal to NULL 
        while (head != null
        
  
            // If min is greater than head->data then 
            // assign value of head->data to min 
            // otherwise node point to next node. 
            if (min > head.data) 
                min = head.data; 
  
            head = head.next; 
        
        return min; 
    
  
    // Function that push the element in linked list. 
    static void push(int data) 
    
        // Allocate dynamic memory for newNode. 
        Node newNode = new Node(); 
  
        // Assign the data into newNode. 
        newNode.data = data; 
  
        // newNode->next assign the address of 
        // head node. 
        newNode.next = (head); 
  
        // newNode become the headNode. 
        (head) = newNode; 
    
  
    // Display linked list. 
    static void printList(Node head) 
    
        while (head != null
        
            Console.Write(head.data + " -> "); 
            head = head.next; 
        
        Console.WriteLine("NULL"); 
    
  
    // Driver code
    public static void Main() 
    
        // Start with empty list 
        // head = new Node(); 
  
        // Using push() function to construct 
        // singly linked list 
        // 17->22->13->14->15 
        push( 15); 
        push( 14); 
        push( 13); 
        push( 22); 
        push( 17); 
        Console.WriteLine("Linked list is : ") ;
  
        // Call printList() function to 
        // display the linked list. 
        printList(head); 
        Console.Write("Maximum element in linked list: "); 
  
        // Call largestElement() function to get 
        // largest element in linked list. 
        Console.WriteLine(largestElement(head)); 
        Console.Write("Minimum element in linked list: "); 
  
        // Call smallestElement() function to get 
        // smallest element in linked list. 
        Console.Write(smallestElement(head)); 
    }
}
  
// This code is contributed by PrinciRaj1992


Javascript




<script>
  
// JavaScript program to find smallest and largest 
// elements in singly linked list. 
    /* Linked list node */
    class Node {
        constructor(val) {
            this.data = val;
            this.next = null;
        }
    }
    var head = null;
  
    // Function that returns the largest element
    // from the linked list.
    function largestElement(head) {
  
        // Declare a max variable and initialize
        // it with INT_MIN value.
        // INT_MIN is integer type and its value
        // is -32767 or less.
        var max = Number.MIN_VALUE;
  
        // Check loop while head not equal to NULL
        while (head != null) {
  
            // If max is less than head->data then
            // assign value of head->data to max
            // otherwise node point to next node.
            if (max < head.data)
                max = head.data;
            head = head.next;
        }
        return max;
    }
  
    // Function that returns smallest element
    // from the linked list.
    function smallestElement(head) {
  
        // Declare a min variable and initialize
        // it with INT_MAX value.
        // INT_MAX is integer type and its value
        // is 32767 or greater.
        var min = Number.MAX_VALUE;
  
        // Check loop while head not equal to NULL
        while (head != null) {
  
            // If min is greater than head->data then
            // assign value of head->data to min
            // otherwise node point to next node.
            if (min > head.data)
                min = head.data;
  
            head = head.next;
        }
        return min;
    }
  
    // Function that push the element in linked list.
    function push(data) {
        // Allocate dynamic memory for newNode.
        var newNode = new Node();
  
        // Assign the data into newNode.
        newNode.data = data;
  
        // newNode->next assign the address of
        // head node.
        newNode.next = (head);
  
        // newNode become the headNode.
        (head) = newNode;
    }
  
    // Display linked list.
    function printList(head) {
        while (head != null) {
            document.write(head.data + " -> ");
            head = head.next;
        }
        document.write("NULL");
    }
  
    // Driver code
      
        // Start with empty list
        // head = new Node();
  
        // Using push() function to construct
        // singly linked list
        // 17->22->13->14->15
        push(15);
        push(14);
        push(13);
        push(22);
        push(17);
        document.write("Linked list is : <br/>");
  
        // Call printList() function to
        // display the linked list.
        printList(head);
        document.write("<br/>Maximum element in linked list: ");
  
        // Call largestElement() function to get
        // largest element in linked list.
        document.write(largestElement(head));
        document.write("<br/>Minimum element in linked list: ");
  
        // Call smallestElement() function to get
        // smallest element in linked list.
        document.write(smallestElement(head));
  
// This code contributed by Rajput-Ji 
  
</script>


Output

Linked list is : 
17 -> 22 -> 13 -> 14 -> 15 -> NULL
Maximum element in linked list:22
Minimum element in linked list:13

Time Complexity: O(n)
Auxiliary Space: O(1)

 



Last Updated : 10 Jan, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads