ที่นี่เราจะมาดูวิธีรับค่าต่ำสุดและสูงสุดจากรายการเชิงเส้นเชื่อมโยงแบบวงกลมเดียว แนวคิดพื้นฐานนั้นง่ายมาก ส่วนถัดไปของโหนดสุดท้ายจะชี้ไปที่โหนดแรก โหนดแรกจะชี้โดยใช้ตัวชี้เริ่มต้นด้วย เมื่อเราแทรกองค์ประกอบบางอย่างลงในรายการ หลังจากแทรกส่วนถัดไปของโหนดที่แทรกใหม่แล้ว จะถูกอัปเดตด้วยที่อยู่ของโหนดเริ่มต้น
เริ่มแรกกำหนดขั้นต่ำด้วยอินฟินิตี้บวกและสูงสุดถูกกำหนดด้วยอินฟินิตี้เชิงลบ ตอนนี้สำรวจรายการจากซ้ายไปขวา หากองค์ประกอบปัจจุบันน้อยกว่าองค์ประกอบขั้นต่ำ ให้อัปเดตขั้นต่ำ หากองค์ประกอบปัจจุบันมีขนาดใหญ่กว่าองค์ประกอบสูงสุด ให้อัปเดตรายการสูงสุด ดังนั้นเราจึงสามารถรับค่าต่ำสุดและสูงสุดได้
ตัวอย่าง
#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