DEV Community

Dhanashree Rugi
Dhanashree Rugi

Posted on

Find Largest And Smallest Number in a Linked List.

For a given linked list, you are supposed to write two separate functions that finds the largest and the smallest number in a linked list and print both the numbers.

Example 1:
Input: 4 6 2 8 1
Output: Largest Number: 8
Output: Smallest Number: 1

Example 2:
Input: 4 5 9 8 2
Output: Largest Number: 9
Output: Smallest Number: 2

Steps to find Largest number:

  • Initialise an integer variable max to INT_MIN.

  • Using temporary pointer temp start traversing the linked list and compare each data element in the linked list with the variable max until the end of linked list.

  • If the current node’s data is greater than value of max, then store the value of the current node’s data into max.

  • Finally, print the value of variable max which contains the largest number of the linked list.

Steps to find Smallest number:

  • Initialise an integer variable min to INT_MAX.

  • Using temporary pointer temp start traversing the linked list and compare each data element in the linked list with the variable min until the end of linked list.

  • If the current node’s data is lesser than the value of min, then store the value of the current node’s data into min.

  • Finally, print the value of variable min which contains the smallest number of the linked list.

Note : We are using INT_MAX because all the data elements are lesser than this and INT_MIN because all the data elements are greater than this. Using these two macros our findings become very easy.

C program that finds the largest and the smallest number in the linked list.

#include <stdio.h>
#include <stdlib.h> 
#include <limits.h>

struct node
{
    int data;
    struct node * next;
};

void displayLL(struct node * head)
{
    struct node * temp;
    temp = head;
    temp=head;
    while(temp!=0)
    {
       printf("%d ",temp->data);
       temp = temp->next;
    }
}
void small(struct node *head)
{
   struct node *temp = head;
   int min;
   min = INT_MAX;

   while(temp != NULL)
   {
       if(min > temp->data)
       {
           min = temp->data;
       }
       temp = temp->next;
   }
   printf("\n--------------------------------\n");
   printf("Smallest number of linked list : %d", min);
}

void large(struct node *head)
{
   struct node *temp = head;
   int max;
   max = INT_MIN;

   while(temp != NULL)
   {
       if(max < temp->data)
       {
           max = temp->data;
       }
       temp = temp->next;
   }
   printf("\n--------------------------------\n");
   printf("Largest number of linked list : %d", max);
}

int main()
{
   struct node *head = 0, *newnode, *temp; 
   int n, choice, newdata;

// Create Linked List // 

   printf("Enter the number of nodes in the list : ");
   scanf("%d", &n);

   if(n == 0)
    {
      printf("--------------------------------\n");
      printf("Linked list cannot be empty");
      exit(0);
    }

   for(int i = 1; i<=n; i++)
   {
     newnode = (struct node *)malloc(sizeof(struct node));
     printf("Enter the data%d : ", i);
     scanf("%d", &newnode->data);
     newnode->next = 0;
     if(head == 0)
     {
        head = temp = newnode;
     } 
     else
       { 
        temp->next = newnode;
        temp = newnode;
       }
    }
   printf("--------------------------------\n");
   printf("Linked list : ");
   displayLL(head);
   small(head);
   large(head);
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)