利用单链表求最大值和最小值
时间: 2025-04-22 14:00:57 浏览: 18
### 使用单链表实现求最大值和最小值
对于单链表而言,可以采用线性扫描的方式找到其中的最大值和最小值。下面分别介绍这两种操作的具体方法。
#### 查找单链表中的最小值
为了查找单链表中的最小值,可以从头节点开始遍历整个列表,在此过程中维护一个变量用于存储当前遇到的最小值以及对应的节点位置。初始时将第一个有效节点设为最小值候选者;随后继续向后访问其他节点并与已知最小值对比更新之直到结束为止[^1]。
```c
// 定义链表结构体
typedef struct ListNode {
int data;
struct ListNode *next;
} LNode;
void findMin(LinkList L, int *minValue) {
if (!L || !L->next) return; // 如果为空链表则直接返回
LNode *current = L->next; // 跳过头结点
*minValue = current->data; // 初始化最小值为首个实际元素
while (current != NULL) {
if (*minValue > current->data)
*minValue = current->data;
current = current->next;
}
}
```
#### 查找单链表中的最大值
同样的思路也适用于寻找最大值的情况——只需改变比较条件即可。即初始化最大值为第一个真实存在的数值项之后依次考察剩余各成员并适时调整极大值记录直至完成全部检验工作。
```c
void findMax(LinkList L, int *maxValue) {
if (!L || !L->next) return; // 若为空链表,则不执行任何动作
LNode *current = L->next; // 排除头部哨兵位
*maxValue = current->data; // 设定起始参照标准
while (current != NULL){
if(*maxValue < current->data)
*maxValue = current->data;
current = current->next;
}
}
```
上述两个函数均实现了O(n)的时间复杂度,这里n代表链表长度。这表明无论是在最坏还是平均情况下都需要对每一个节点做一次处理才能得出最终的结果。
阅读全文
相关推荐

















