已知head为单链表的表头指针,链表中存储的都是整型数据,实现下列运算的递归算法:(1)求链表中的最大值。 (2)求链表中的结点个数。 (3)求所有整数的平均值。
时间: 2024-10-08 21:21:22 浏览: 36
已知head为单链表的表头指针,链表中存储的都是整形数据,实现下列运算的递归算法
4星 · 用户满意度95%
在递归算法中操作链表,我们需要考虑基本情况和递归情况。以下是针对每个运算的递归实现:
1. **求链表中的最大值**:
- 基本情况:如果链表为空,返回None或特殊值表示无最大值(如Integer.MIN_VALUE)。
- 递归情况:若链表非空,则比较当前节点的值和前一个节点的最大值,取较大者作为当前的最大值,并继续对下一个节点递归。
```python
def find_max(head):
if head is None or head.next is None: # 如果链表结束
return float('-inf') # 或返回最小可能的整数值
else:
max_val = head.value # 当前节点值
return max(max_val, find_max(head.next)) # 递归查找更大的值
```
2. **求链表中的结点个数**:
- 基本情况:如果链表为空,返回0。
- 递归情况:对于非空链表,增加1并递归处理下一个节点。
```python
def count_nodes(head):
if head is None: # 链表结束
return 0
else:
return 1 + count_nodes(head.next) # 继续计数
```
3. **求所有整数的平均值**:
- 基本情况:如果链表为空,返回None或0。
- 递归情况:累加当前节点的值,然后除以节点总数。
```python
def average(head):
total = 0
count = 0
def inner(node):
nonlocal total, count
if node is not None:
total += node.value
count += 1
inner(node.next)
inner(head)
return total / count if count > 0 else None # 防止除以0的情况
```
阅读全文