在C ++中的单个循环链表中查找最小和最大元素
在这里,我们将看到如何从一个单圆链接线性列表中获取最小值和最大值。基本概念非常简单。最后一个节点的下一部分将指向第一个节点,第一个节点也将使用开始指针指向。当我们将某些元素插入列表时,在插入新插入的节点的下一部分之后,将使用起始节点的地址进行更新。
最初,将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 66Minimum: 10, Maximum: 99
以上是 在C ++中的单个循环链表中查找最小和最大元素 的全部内容, 来源链接: utcz.com/z/348987.html