# Find minimum and maximum elements in singly Circular Linked List

Given a singly circular linked list of nodes. The task is to find the smallest and largest elements in the circular linked list.
Examples

```Input : List = 99->11->22->33->44->55->66
Output : Minimum = 11, Maximum = 99

Input : List = 12->11->9->33->125->6->99
Output : Minimum = 6, Maximum = 125```

The idea is to traverse the circular linked list while last node is not reached 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 then head value is assign to max or min value is greater then head value then head value is assign to min otherwise head point to next node. Continue this process until last node.
Below is the implementation of the above approach:

 `// C++ program to find minimum and maximum` `// value from singly circular linked list` `#include ` `using` `namespace` `std;`   `// structure for a node` `struct` `Node {` `    ``int` `data;` `    ``struct` `Node* next;` `};`   `// Function to print minimum and maximum` `// nodes of the circular linked list` `void` `printMinMax(``struct` `Node** head)` `{` `    ``// check list is empty` `    ``if` `(*head == NULL) {` `        ``return``;` `    ``}`   `    ``// pointer for traversing` `    ``struct` `Node* current;`   `    ``// initialize head to current pointer` `    ``current = *head;`   `    ``// initialize max int value to min` `    ``// initialize min int value to max` `    ``int` `min = INT_MAX, max = INT_MIN;`   `    ``// While last node is not reached` `    ``do` `{`   `        ``// If current node data is lesser for min` `        ``// then replace it` `        ``if` `(current->data < min) {` `            ``min = current->data;` `        ``}`   `        ``// If current node data is greater for max` `        ``// then replace it` `        ``if` `(current->data > max) {` `            ``max = current->data;` `        ``}`   `        ``current = current->next;` `    ``}``while``(current != head);`   `    ``cout << ``"\nMinimum = "` `<< min << ``", Maximum = "` `<< max;` `}`   `// Function to insert a node at the end of` `// a Circular linked list` `void` `insertNode(``struct` `Node** head, ``int` `data)` `{` `    ``struct` `Node* current = *head;` `    ``// Create a new node` `    ``struct` `Node* newNode = ``new` `Node;`   `    ``// check node is created or not` `    ``if` `(!newNode) {` `        ``printf``(``"\nMemory Error\n"``);` `        ``return``;` `    ``}`   `    ``// insert data into newly created node` `    ``newNode->data = data;`   `    ``// check list is empty` `    ``// if not have any node then` `    ``// make first node it` `    ``if` `(*head == NULL) {` `        ``newNode->next = newNode;` `        ``*head = newNode;` `        ``return``;` `    ``}`   `    ``// if list have already some node` `    ``else` `{`   `        ``// move firt node to last node` `        ``while` `(current->next != *head) {` `            ``current = current->next;` `        ``}`   `        ``// put first or head node address` `        ``// in new node link` `        ``newNode->next = *head;`   `        ``// put new node address into` `        ``// last node link(next)` `        ``current->next = newNode;` `    ``}` `}`   `// Function to print the Circular linked list` `void` `displayList(``struct` `Node* head)` `{`   `    ``struct` `Node* current = head;`   `    ``// if list is empty simply show message` `    ``if` `(head == NULL) {` `        ``printf``(``"\nDisplay List is empty\n"``);` `        ``return``;` `    ``}`   `    ``// traverse first to last node` `    ``else` `{` `        ``do` `{` `            ``printf``(``"%d "``, current->data);` `            ``current = current->next;` `        ``} ``while` `(current != head);` `    ``}` `}`   `// Driver Code` `int` `main()` `{` `    ``struct` `Node* Head = NULL;`   `    ``insertNode(&Head, 99);` `    ``insertNode(&Head, 11);` `    ``insertNode(&Head, 22);` `    ``insertNode(&Head, 33);` `    ``insertNode(&Head, 44);` `    ``insertNode(&Head, 55);` `    ``insertNode(&Head, 66);`   `    ``cout << ``"Initial List: "``;`   `    ``displayList(Head);`   `    ``printMinMax(&Head);`   `    ``return` `0;` `}`

 `// Java program to find minimum and maximum ` `// value from singly circular linked list ` `class` `GFG` `{`   `// structure for a node ` `static` `class` `Node ` `{ ` `    ``int` `data; ` `    ``Node next; ` `}; `   `// Function to print minimum and maximum ` `// nodes of the circular linked list ` `static` `void` `printMinMax(Node head) ` `{ ` `    ``// check list is empty ` `    ``if` `(head == ``null``)` `    ``{ ` `        ``return``; ` `    ``} `   `    ``// pointer for traversing ` `    ``Node current; `   `    ``// initialize head to current pointer ` `    ``current = head; `   `    ``// initialize max int value to min ` `    ``// initialize min int value to max ` `    ``int` `min = Integer.MAX_VALUE, max = Integer.MIN_VALUE; `   `    ``// While last node is not reached ` `    ``while` `(current.next != head)` `    ``{ `   `        ``// If current node data is lesser for min ` `        ``// then replace it ` `        ``if` `(current.data < min) ` `        ``{ ` `            ``min = current.data; ` `        ``} `   `        ``// If current node data is greater for max ` `        ``// then replace it ` `        ``if` `(current.data > max)` `        ``{ ` `            ``max = current.data; ` `        ``} `   `        ``current = current.next; ` `    ``} `   `    ``System.out.println( ``"\nMinimum = "` `+ min + ``", Maximum = "` `+ max); ` `} `   `// Function to insert a node at the end of ` `// a Circular linked list ` `static` `Node insertNode(Node head, ``int` `data) ` `{ ` `    ``Node current = head; ` `    `  `    ``// Create a new node ` `    ``Node newNode = ``new` `Node(); `   `    ``// check node is created or not ` `    ``if` `(newNode == ``null``) ` `    ``{ ` `        ``System.out.printf(``"\nMemory Error\n"``); ` `        ``return` `null``; ` `    ``} `   `    ``// insert data into newly created node ` `    ``newNode.data = data; `   `    ``// check list is empty ` `    ``// if not have any node then ` `    ``// make first node it ` `    ``if` `(head == ``null``) ` `    ``{ ` `        ``newNode.next = newNode; ` `        ``head = newNode; ` `        ``return` `head; ` `    ``} `   `    ``// if list have already some node ` `    ``else` `    ``{ `   `        ``// move firt node to last node ` `        ``while` `(current.next != head)` `        ``{ ` `            ``current = current.next; ` `        ``} `   `        ``// put first or head node address ` `        ``// in new node link ` `        ``newNode.next = head; `   `        ``// put new node address into ` `        ``// last node link(next) ` `        ``current.next = newNode; ` `    ``} ` `    ``return` `head;` `} `   `// Function to print the Circular linked list ` `static` `void` `displayList(Node head) ` `{ `   `    ``Node current = head; `   `    ``// if list is empty simply show message ` `    ``if` `(head == ``null``)` `    ``{ ` `        ``System.out.printf(``"\nDisplay List is empty\n"``); ` `        ``return``; ` `    ``} `   `    ``// traverse first to last node ` `    ``else` `    ``{ ` `        ``do` `        ``{ ` `            ``System.out.printf(``"%d "``, current.data); ` `            ``current = current.next; ` `        ``} ``while` `(current != head); ` `    ``} ` `} `   `// Driver Code ` `public` `static` `void` `main(String args[])` `{ ` `    ``Node Head = ``null``; `   `    ``Head=insertNode(Head, ``99``); ` `    ``Head=insertNode(Head, ``11``); ` `    ``Head=insertNode(Head, ``22``); ` `    ``Head=insertNode(Head, ``33``); ` `    ``Head=insertNode(Head, ``44``); ` `    ``Head=insertNode(Head, ``55``); ` `    ``Head=insertNode(Head, ``66``); `   `    ``System.out.println(``"Initial List: "``); `   `    ``displayList(Head); `   `    ``printMinMax(Head); ` `} ` `}`   `// This code is contributed by Arnab Kundu`

 `# Python3 program to find minimum and maximum` `# value from singly circular linked list` ` `  `# structure for a node` `class` `Node:` `    `  `    ``def` `__init__(``self``):` `        `  `        ``self``.data ``=` `0` `        ``self``.``next` `=` `None` `    `  `# Function to print minimum and maximum` `# nodes of the circular linked list` `def` `printMinMax(head):`   `    ``# check list is empty` `    ``if` `(head ``=``=` `None``):` `        ``return``;` ` `  `    ``# initialize head to current pointer` `    ``current ``=` `head;` ` `  `    ``# initialize max int value to min` `    ``# initialize min int value to max` `    ``min` `=` `1000000000` `    ``max` `=` `-``1000000000``;` ` `  `    ``# While last node is not reached` `    ``while` `True``:` ` `  `        ``# If current node data is lesser for min` `        ``# then replace it` `        ``if` `(current.data < ``min``):` `            ``min` `=` `current.data;` ` `  `        ``# If current node data is greater for max` `        ``# then replace it` `        ``if` `(current.data > ``max``):` `            ``max` `=` `current.data;` ` `  `        ``current ``=` `current.``next``;        ` `        ``if``(current ``=``=` `head):` `            ``break`    `    ``print``(``'Minimum = {}, Maximum = {}'``.``format``(``min``, ``max``))` ` `  `# Function to insert a node at the end of` `# a Circular linked list` `def` `insertNode(head, data):` `    ``current ``=` `head;` `    `  `    ``# Create a new node` `    ``newNode ``=` `Node()` ` `  `    ``# check node is created or not` `    ``if` `not` `newNode:` `        ``print``(``"\nMemory Error"``);` `        ``return` `head` ` `  `    ``# insert data into newly created node` `    ``newNode.data ``=` `data;` ` `  `    ``# check list is empty` `    ``# if not have any node then` `    ``# make first node it` `    ``if` `(head ``=``=` `None``):` `        ``newNode.``next` `=` `newNode;` `        ``head ``=` `newNode;` `        ``return` `head` ` `  `    ``# if list have already some node` `    ``else``:` ` `  `        ``# move firt node to last node` `        ``while` `(current.``next` `!``=` `head):` `            ``current ``=` `current.``next``;` ` `  `        ``# put first or head node address` `        ``# in new node link` `        ``newNode.``next` `=` `head;` ` `  `        ``# put new node address into` `        ``# last node link(next)` `        ``current.``next` `=` `newNode;        ` `    ``return` `head` ` `  `# Function to print the Circular linked list` `def` `displayList(head):` `    ``current ``=` `head;` ` `  `    ``# if list is empty simply show message` `    ``if` `(head ``=``=` `None``):` `        ``print``(``"\nDisplay List is empty"``);` `        ``return``;` ` `  `    ``# traverse first to last node` `    ``else``:` `        `  `        ``while` `True``:` `            ``print``(current.data, end``=``' '``);` `            ``current ``=` `current.``next``;           ` `            ``if``(current``=``=``head):` `                ``break` `    ``print``()` ` `  `# Driver Code` `if` `__name__``=``=``'__main__'``:` `    `  `    ``Head ``=` `None``;` ` `  `    ``Head ``=` `insertNode(Head, ``99``);` `    ``Head ``=` `insertNode(Head, ``11``);` `    ``Head ``=` `insertNode(Head, ``22``);` `    ``Head ``=` `insertNode(Head, ``33``);` `    ``Head ``=` `insertNode(Head, ``44``);` `    ``Head ``=` `insertNode(Head, ``55``);` `    ``Head ``=` `insertNode(Head, ``66``);` ` `  `    ``print``(``"Initial List: "``, end ``=` `'')` ` `  `    ``displayList(Head);` ` `  `    ``printMinMax(Head);` ` `  `# This code is contributed by rutvik_56`

 `// C# program to find minimum and maximum ` `// value from singly circular linked list ` `using` `System;` `    `  `class` `GFG` `{`   `// structure for a node ` `public` `class` `Node ` `{ ` `    ``public` `int` `data; ` `    ``public` `Node next; ` `}; `   `// Function to print minimum and maximum ` `// nodes of the circular linked list ` `static` `void` `printMinMax(Node head) ` `{ ` `    ``// check list is empty ` `    ``if` `(head == ``null``)` `    ``{ ` `        ``return``; ` `    ``} `   `    ``// pointer for traversing ` `    ``Node current; `   `    ``// initialize head to current pointer ` `    ``current = head; `   `    ``// initialize max int value to min ` `    ``// initialize min int value to max ` `    ``int` `min = ``int``.MaxValue, max = ``int``.MinValue; `   `    ``// While last node is not reached ` `    ``while` `(current.next != head)` `    ``{ `   `        ``// If current node data is lesser for min ` `        ``// then replace it ` `        ``if` `(current.data < min) ` `        ``{ ` `            ``min = current.data; ` `        ``} `   `        ``// If current node data is greater for max ` `        ``// then replace it ` `        ``if` `(current.data > max)` `        ``{ ` `            ``max = current.data; ` `        ``} `   `        ``current = current.next; ` `    ``} `   `    ``Console.WriteLine( ``"\nMinimum = "` `+ min + ``", Maximum = "` `+ max); ` `} `   `// Function to insert a node at the end of ` `// a Circular linked list ` `static` `Node insertNode(Node head, ``int` `data) ` `{ ` `    ``Node current = head; ` `    `  `    ``// Create a new node ` `    ``Node newNode = ``new` `Node(); `   `    ``// check node is created or not ` `    ``if` `(newNode == ``null``) ` `    ``{ ` `        ``Console.Write(``"\nMemory Error\n"``); ` `        ``return` `null``; ` `    ``} `   `    ``// insert data into newly created node ` `    ``newNode.data = data; `   `    ``// check list is empty ` `    ``// if not have any node then ` `    ``// make first node it ` `    ``if` `(head == ``null``) ` `    ``{ ` `        ``newNode.next = newNode; ` `        ``head = newNode; ` `        ``return` `head; ` `    ``} `   `    ``// if list have already some node ` `    ``else` `    ``{ `   `        ``// move firt node to last node ` `        ``while` `(current.next != head)` `        ``{ ` `            ``current = current.next; ` `        ``} `   `        ``// put first or head node address ` `        ``// in new node link ` `        ``newNode.next = head; `   `        ``// put new node address into ` `        ``// last node link(next) ` `        ``current.next = newNode; ` `    ``} ` `    ``return` `head;` `} `   `// Function to print the Circular linked list ` `static` `void` `displayList(Node head) ` `{ `   `    ``Node current = head; `   `    ``// if list is empty simply show message ` `    ``if` `(head == ``null``)` `    ``{ ` `        ``Console.Write(``"\nDisplay List is empty\n"``); ` `        ``return``; ` `    ``} `   `    ``// traverse first to last node ` `    ``else` `    ``{ ` `        ``do` `        ``{ ` `            ``Console.Write(``"{0} "``, current.data); ` `            ``current = current.next; ` `        ``} ``while` `(current != head); ` `    ``} ` `} `   `// Driver Code ` `public` `static` `void` `Main()` `{ ` `    ``Node Head = ``null``; `   `    ``Head=insertNode(Head, 99); ` `    ``Head=insertNode(Head, 11); ` `    ``Head=insertNode(Head, 22); ` `    ``Head=insertNode(Head, 33); ` `    ``Head=insertNode(Head, 44); ` `    ``Head=insertNode(Head, 55); ` `    ``Head=insertNode(Head, 66); `   `    ``Console.WriteLine(``"Initial List: "``); `   `    ``displayList(Head); `   `    ``printMinMax(Head); ` `} ` `}`   `/* This code contributed by PrinciRaj1992 */`

Output:
```Initial List: 99 11 22 33 44 55 66
Minimum = 11, Maximum = 99```

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.