反转链表 递归
时间: 2025-03-17 16:17:20 浏览: 35
### 使用递归方法反转单向链表
递归方法是一种优雅的方式来实现链表的反转。其核心思想是通过分而治之的策略,逐层处理子链表直到达到最小子问题(即只有一个节点或为空),然后再逐步回溯完成整个链表的反转。
以下是递归反转单向链表的具体实现:
#### 1. 基本原理
递归函数的核心在于定义好终止条件以及每一步的操作逻辑。当当前节点为 `null` 或者下一个节点为 `null` 时,表示已经到达链表末端,则直接返回该节点作为新的头节点[^2]。
#### 2. 实现代码
以下是一个基于 Python 的递归反转链表的实现示例:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
# 如果链表为空或者只剩一个节点,直接返回 head
if not head or not head.next:
return head
# 对剩余部分进行递归反转
new_head = reverseList(head.next)
# 将当前节点的下一节点指向自己
head.next.next = head
# 断开当前节点原本的 next 指针
head.next = None
# 返回新的头节点
return new_head
```
#### 3. 测试用例
为了验证上述代码的功能,可以使用如下测试案例来观察输入和输出的结果:
```python
# 创建链表 1 -> 2 -> 3 -> 4 -> 5
node5 = ListNode(5)
node4 = ListNode(4, node5)
node3 = ListNode(3, node4)
node2 = ListNode(2, node3)
head = ListNode(1, node2)
# 打印原始链表
current = head
while current:
print(current.val, end=" -> ")
current = current.next
print("None")
# 调用递归反转函数
reversed_head = reverseList(head)
# 打印反转后的链表
current = reversed_head
while current:
print(current.val, end=" -> ")
current = current.next
print("None")
```
运行以上代码后,可以看到输出结果为:
```
1 -> 2 -> 3 -> 4 -> 5 -> None
5 -> 4 -> 3 -> 2 -> 1 -> None
```
这表明递归方法成功实现了链表的反转操作[^3]。
#### 4. 时间与空间复杂度分析
- **时间复杂度**: 每个节点仅被访问一次,因此总的时间复杂度为 O(n)[^2]。
- **空间复杂度**: 由于递归调用了 n 层栈帧(n 是链表长度),所以空间复杂度为 O(n)[^2]。
需要注意的是,如果链表过长,可能会因为递归层数过多而导致栈溢出问题。在这种情况下,建议考虑迭代法或其他优化方案。
---
阅读全文
相关推荐

















