Python program to find the maximum and minimum value node from a circular linked list
In this program, we will create a circular linked list then, iterate through the list to find out the minimum and maximum node.
- 9->5->2->7->3
We will maintain two variables min and max. Min will hold the minimum value node, and max will hold the maximum value node. In the above example, 2 will be the minimum value node and 9 will be the maximum value node.
ALGORITHM:
- Define a Node class which represents a node in the list. It has two properties data and next which will point to the next node.
- Define another class for creating the circular linked list, and it has two nodes: head and tail.
- minNode() will print out minimum value node:
- Define variable min and initialize with head’s data.
- Current will point to head.
- Iterate through the list by comparing each node’s data with min.
- If min > current’s data then min will hold current’s data.
- At the end of the list, variable min will hold the minimum value node.
- Print the min value.
a. maxNode() will prints out maximum value node:
- Define variable max and initialize with head’s data.
- Current will point to head.
- Iterate through the list by comparing each node’s data with max.
- If max > current’s data, then max will hold current’s data.
- At the end of the list, variable max will hold the maximum value node.
- Print the max value.
PROGRAM:
- #Represents the node of list.
- class Node:
- def __init__(self,data):
- self.data = data;
- self.next = None;
- class CreateList:
- #Declaring head and tail pointer as null.
- def __init__(self):
- self.head = Node(None);
- self.tail = Node(None);
- self.head.next = self.tail;
- self.tail.next = self.head;
- #This function will add the new node at the end of the list.
- def add(self,data):
- newNode = Node(data);
- #Checks if the list is empty.
- if self.head.data is None:
- #If list is empty, both head and tail would point to new node.
- self.head = newNode;
- self.tail = newNode;
- newNode.next = self.head;
- else:
- #tail will point to new node.
- self.tail.next = newNode;
- #New node will become new tail.
- self.tail = newNode;
- #Since, it is circular linked list tail will point to head.
- self.tail.next = self.head;
- #Finds out the minimum value node in the list
- def minNode(self):
- current = self.head;
- #Initializing min to initial node data
- minimum = self.head.data;
- if(self.head == None):
- print(“List is empty”);
- else:
- while(True):
- #If current node’s data is smaller than min
- #Then replace value of min with current node’s data
- if(minimum > current.data):
- minimum = current.data;
- current= current.next;
- if(current == self.head):
- break;
- print(“Minimum value node in the list: “+ str(minimum));
- #Finds out the maximum value node in the list
- def maxNode(self):
- current = self.head;
- #Initializing max to initial node data
- maximum = self.head.data;
- if(self.head == None):
- print(“List is empty”);
- else:
- while(True):
- #If current node’s data is greater than max
- #Then replace value of max with current node’s data
- if(maximum < current.data):
- maximum = current.data;
- current= current.next;
- if(current == self.head):
- break;
- print(“Maximum value node in the list: “+ str(maximum));
- class CircularLinkedList:
- cl = CreateList();
- #Adds data to the list
- cl.add(5);
- cl.add(20);
- cl.add(10);
- cl.add(1);
- #Prints the minimum value node in the list
- cl.minNode();
- #Prints the maximum value node in the list
- cl.maxNode();
Output:
Minimum value node in the list: 1 Maximum value node in the list: 20