यहां हम देखेंगे कि एकल परिपत्र लिंक्ड रैखिक सूची से न्यूनतम और अधिकतम मान कैसे प्राप्त करें। मूल अवधारणा बहुत सरल है। अंतिम नोड का अगला भाग पहले नोड की ओर इशारा करेगा, पहला नोड भी स्टार्ट पॉइंटर का उपयोग करके इंगित किया जाएगा। जब हम सूची में कुछ तत्व डालते हैं, तो डालने के बाद नवीनतम डाले गए नोड का अगला भाग स्टार्ट नोड के पते के साथ अपडेट किया जाएगा।
प्रारंभ में न्यूनतम को पॉजिटिव इन्फिनिटी और अधिकतम को नेगेटिव इन्फिनिटी असाइन किया जाता है। अब सूची को बाएं से दाएं ट्रैवर्स करें। यदि वर्तमान तत्व न्यूनतम तत्व से कम है, तो न्यूनतम अपडेट करें, यदि वर्तमान तत्व अधिकतम तत्व से बड़ा है, तो अधिकतम अपडेट करें। इस प्रकार हम न्यूनतम और अधिकतम मान प्राप्त कर सकते हैं।
उदाहरण
#include<iostream> using namespace std; class Node{ public: int data; Node *next; }; Node* getNode(int key){ Node *newNode = new Node(); newNode->data = key; newNode->next = NULL; return newNode; } void insert(Node **start, int data){ Node *current = *start; Node *newNode = getNode(data); if(*start == NULL){ newNode->next = newNode; *start = newNode; return; } while (current->next != *start) { current = current->next; } newNode->next = *start; current->next = newNode; } void displayList(Node *start){ Node* current = start; if (start == NULL) { cout << "Display List is empty"; return; } else { do { cout << current->data << " "; current = current->next; } while (current != start); } cout << endl; } void getMinMax(Node **start){ if(*start == NULL){ return; } Node* current; current = *start; int min = INT_MAX, max = INT_MIN; while (current->next != *start) { if (current->data < min) { min = current->data; } if (current->data > max) { max = current->data; } current = current->next; } cout << "Minimum: " << min << ", Maximum: " << max; } int main() { int data[] = {99, 11, 22, 10, 44, 55, 66}; int n = sizeof(data)/sizeof(data[0]); Node *start = NULL; for(int i = 0; i<n; i++){ insert(&start, data[i]); } displayList(start); getMinMax(&start); }आउटपुट
99 11 22 10 44 55 66 Minimum: 10, Maximum: 99