#include <iostream> using namespace std; typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; void CreateList_R(LinkList &L,int n) {//后插法创建单链表 L=new LNode; L->next=NULL; LinkList r=L; for(int i=0;i<n;i++) { LinkList p=new LNode; cin>>p->data; p->next=NULL; r->next=p; r=p; } } int GetMax(LinkList L) {//递归求解单链表中的最大值 /**************begin************/ /**************end************/ } int main() { int n; while(cin>>n) { if(n==0) break; LinkList L; CreateList_R(L,n); L=L->next; //指向首元结点 cout<<GetMax(L)<<endl; } return 0; }
时间: 2025-06-03 07:20:47 浏览: 21
### 单链表递归求最大值函数实现
在C++中,单链表的递归实现可以通过定义一个递归函数来完成。以下是完整的实现代码和详细解释。
#### 代码实现
```cpp
#include <iostream>
using namespace std;
// 定义单链表节点结构
struct Node {
int data; // 节点数据
Node* next; // 指向下一个节点的指针
};
// 建立单链表并返回头指针
Node* buildLinkedList(int arr[], int n) {
if (n == 0) return nullptr;
Node* head = new Node{arr[0], nullptr};
Node* current = head;
for (int i = 1; i < n; ++i) {
current->next = new Node{arr[i], nullptr};
current = current->next;
}
return head;
}
// 递归求解单链表中的最大值
int getMax(Node* head, int maxVal = -2147483648) {
if (head == nullptr) { // 如果链表为空或遍历到尾部,返回当前最大值
return maxVal;
}
if (head->data > maxVal) { // 更新最大值
maxVal = head->data;
}
return getMax(head->next, maxVal); // 递归处理下一个节点
}
// 测试主函数
int main() {
int arr[] = {3, 5, 2, 9, 1, 7}; // 示例数组
int n = sizeof(arr) / sizeof(arr[0]);
Node* head = buildLinkedList(arr, n); // 构建单链表
cout << "单链表中的最大值为: " << getMax(head) << endl; // 输出最大值
return 0;
}
```
#### 代码解析
1. **单链表节点定义**
使用 `struct Node` 定义单链表节点,包含两个成员:`data` 存储节点值,`next` 指向下一个节点的指针[^1]。
2. **构建单链表**
函数 `buildLinkedList` 根据输入数组创建单链表,并返回头指针。通过循环将数组元素依次插入链表中。
3. **递归求最大值**
函数 `getMax` 实现递归求解单链表中的最大值。如果当前节点为空,则返回当前的最大值;否则,比较当前节点值与当前最大值,并递归处理下一个节点[^2]。
4. **测试主函数**
在 `main` 函数中,首先定义一个示例数组,然后调用 `buildLinkedList` 构建单链表,最后调用 `getMax` 求解最大值并输出结果。
#### 注意事项
- 初始最大值 `maxVal` 设置为整型最小值 `-2147483648`,以确保任何链表中的值都能被正确比较。
- 如果链表为空,则直接返回初始最大值(即 `-2147483648`)[^1]。
---
###
阅读全文
相关推荐
















