এখানে আমরা দেখব কিভাবে একটি সিংলি সার্কুলার লিংকড লিস্ট থেকে ন্যূনতম এবং সর্বোচ্চ মান বের করা যায়। বেসিক কনসেপ্ট হলো: শেষ নোডের next পয়েন্টার প্রথম নোডকে নির্দেশ করবে, এবং প্রথম নোডটিও একটি start পয়েন্টার দিয়ে নির্দেশ করা থাকবে। নতুন উপাদান ইনসার্ট করার সময়, নতুন নোডের next অংশ start নোডের ঠিকানা দিয়ে আপডেট করা হবে।
শুরুতে min কে পজিটিভ ইনফিনিটি এবং max কে 네가টিভ ইনফিনিটি দিয়ে আরম্ভ করা হয়। এখন লিস্টটি বাম থেকে ডানে ট্রাভার্স করুন। যদি বর্তমান উপাদান min-এর চেয়ে ছোট হয়, তবে min আপডেট করুন; যদি max-এর চেয়ে বড় হয়, তবে max আপডেট করুন। এইভাবে ন্যূনতম ও সর্বোচ্চ মান পাওয়া যায়।
উদাহরণ
#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