已知head为单链表的表头指针,使用递归求平均值算法f已知 f 为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法: (1) 求链表中的最大整数; (2) 求链表的结点个数; (3) 求所有整数的平均值。un2
时间: 2024-09-22 16:08:48 浏览: 55
首先,我们需要明确的是,递归算法通常适用于可以分解成相似子问题的情况。对于给定的问题:
(1) **求链表中的最大整数**:
递归思路是先检查当前节点是否为空,如果为空则返回负无穷大(或链表中的最小值,因为我们要找最大),然后比较当前节点的数值和下一个节点的可能最大值。递归公式如下:
```python
def max_in_list(head):
if head is None: # 空链表,返回负无穷大
return float('-inf')
else:
current_max = head.val # 当前节点的最大值
next_max = max_in_list(head.next) # 递归获取下一位的最大值
return max(current_max, next_max)
```
(2) **求链表的结点个数**:
这个可以直接通过递归的方式计算,每向前一步就增加计数,直到到达链表尾部。
```python
def count_nodes(head):
if head is None:
return 0
else:
return 1 + count_nodes(head.next)
```
(3) **求所有整数的平均值**:
同样,需要一个辅助变量来累加所有节点的值,同时递归地遍历整个链表。
```python
def avg_of_list(head):
total_sum = 0
def helper(node):
nonlocal total_sum
if node is not None:
total_sum += node.val
helper(node.next)
helper(head)
if count_nodes(head) == 0: # 防止除以零错误
return 0
else:
return total_sum / count_nodes(head)
```
以上三个函数都依赖于`head`作为递归的基础,每次递归都会处理链表的一个小部分,直到链表结束。
阅读全文