在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 66

Minimum: 10, Maximum: 99

以上是 在C ++中的单个循环链表中查找最小和最大元素 的全部内容, 来源链接: utcz.com/z/348987.html

回到顶部