📅  最后修改于: 2023-12-03 15:10:20.698000             🧑  作者: Mango
单向链表是一种常见的线性数据结构,由若干个节点构成,每个节点包含一个数据元素和一个指向下一个节点的指针。本文将介绍如何在单向链表中查找最大和最小值节点。
我们可以先定义一个节点结构体来表示单向链表的节点:
struct Node {
int value;
Node* next;
};
接着,我们可以编写一个函数来遍历链表,同时维护最大和最小值节点的指针。代码如下:
void findMinMax(Node* head, Node** minNode, Node** maxNode) {
*minNode = head;
*maxNode = head;
Node* p = head;
while (p != nullptr) {
if (p->value < (*minNode)->value) {
*minNode = p;
}
if (p->value > (*maxNode)->value) {
*maxNode = p;
}
p = p->next;
}
}
findMinMax函数接受一个头结点指针head、以及可修改的最小值节点指针minNode和最大值节点指针maxNode。我们将minNode和maxNode的初始值均设为head,然后遍历整个链表,通过比较当前节点的value和minNode、maxNode指向的节点的value来更新minNode和maxNode。
使用方法示例:
Node* head = new Node{1, new Node{2, new Node{3, nullptr}}};
Node* minNode;
Node* maxNode;
findMinMax(head, &minNode, &maxNode);
cout << "minNode: " << minNode->value << endl; // 输出1
cout << "maxNode: " << maxNode->value << endl; // 输出3
本文介绍了如何在单向链表中查找最大和最小值节点,关键在于遍历整个链表,同时维护最大和最小值节点的指针进行比较。通过本文的学习,我们可以更好地理解单向链表的结构和遍历方式。