用C++已知f为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递 归算法: ① 求链表中的最大整数; ② 求链表的节点个数; ③ 求所有整数的平均值。
时间: 2024-10-20 13:15:27 浏览: 31
在C++中,我们可以使用递归来遍历链表并计算所需信息。以下是递归实现各操作的示例:
1. **求链表中的最大整数**:
```cpp
int findMax(Node* f, int currentMax = INT_MIN) {
if (f == nullptr) return currentMax;
if (*f > currentMax) currentMax = *f;
return findMax(f->next, currentMax);
}
```
这里假设`Node`是一个链表节点结构,包含整型数据`data`和指向下一个节点的指针`next`。
2. **求链表的节点个数**:
```cpp
size_t countNodes(Node* f) {
if (f == nullptr) return 0;
return 1 + countNodes(f->next);
}
```
这个函数返回从当前节点开始到链表结束的节点总数。
3. **求所有整数的平均值**:
由于递归需要预先知道列表长度,我们不能直接得到平均值。因此,我们需要先遍历整个链表并累计总和,然后在外部计算平均值。可以这样做:
```cpp
double averageSum(Node* f, int sum = 0, size_t count = 0) {
if (f == nullptr) return count ? static_cast<double>(sum) / count : 0;
sum += *f;
count++;
return averageSum(f->next, sum, count);
}
double calculateAverage(Node* f) {
double sum = averageSum(f);
return sum / countNodes(f);
}
```
上述函数首先计算累加和`sum`和节点计数`count`,然后在`calculateAverage`函数里返回它们的商作为平均值。
阅读全文