用c++编写一个程序,已知head为单链表的表头指针,链表中存储的都是整型数据,实现下列运算的递归算法: (1)求链表中的最大值。 (2)求链表中的结点个数。 (3)求所有整数的平均值。
时间: 2024-10-09 18:02:52 浏览: 31
数据结构各种算法模板C++实现
在C++中,我们可以创建一个递归函数来处理单链表的操作。首先,我们需要定义一个Node结构体表示链表节点,并包含一个整数值和指向下一个节点的指针。
```cpp
struct Node {
int value;
Node* next;
};
// (1)递归求链表的最大值
int findMax(Node* head) {
if (head == nullptr) { // 空链表的情况
return INT_MIN; // 返回最小整数
}
return std::max(head->value, findMax(head->next)); // 递归比较当前值和下一个节点的最大值
}
// (2)递归求链表的节点个数
size_t countNodes(Node* head) {
if (head == nullptr) { // 链表为空
return 0;
}
return 1 + countNodes(head->next); // 递归计算加上当前节点后的总节点数
}
// (3)递归求链表所有整数的平均值(假设链表非空)
double average(Node* head) {
if (head == nullptr) { // 链表为空
throw std::runtime_error("Cannot calculate average of an empty list");
}
double sum = head->value;
size_t count = 1;
Node* temp = head->next;
while (temp != nullptr) {
sum += temp->value;
count++;
temp = temp->next;
}
return sum / count;
}
```
请注意,上述代码仅适用于非空链表。在实际应用中,可能需要添加边界检查和错误处理。以下是运行这组操作的示例:
```cpp
int main() {
// 初始化链表...
// 使用递归函数
Node* head = ...; // 获取链表头指针
int maxVal = findMax(head);
size_t nodeCount = countNodes(head);
double avg = average(head);
// 打印结果
cout << "Max Value: " << maxVal << endl;
cout << "Node Count: " << nodeCount << endl;
cout << "Average: " << avg << endl;
return 0;
}
```
阅读全文