java 链表翻转
时间: 2025-05-17 16:15:33 浏览: 24
### 单链表反转的实现
#### 思路分析
单链表反转的核心在于调整链表中每个节点的 `next` 指针方向,使得原本指向下一个节点的方向变为指向上一个节点。这一操作可以通过迭代法或递归法来完成。
#### 迭代法实现
迭代方法通过遍历整个链表并逐步修改节点之间的连接关系来实现反转。以下是具体代码示例:
```java
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null; // 初始化前驱节点为空
ListNode curr = head; // 当前节点初始化为头节点
while (curr != null) { // 遍历直到当前节点为空
ListNode nextTemp = curr.next; // 保存当前节点的下一节点
curr.next = prev; // 修改当前节点的 next 指向其前驱节点
prev = curr; // 更新前驱节点为当前节点
curr = nextTemp; // 移动到下一节点继续处理
}
return prev; // 返回新的头节点(原链表的最后一个节点)
}
}
```
上述代码实现了单链表的反转功能[^1]。其中,变量 `prev` 始终表示已经反转部分的新链表头部,而 `curr` 表示正在处理的当前节点。
#### 递归法实现
递归方法利用函数调用栈逐层深入至链表末端后再回溯构建新链表。下面是基于递归方式的代码示例:
```java
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode newHead = reverseList(head.next);
head.next.next = head; // 将下一层返回的结果中的尾部指向当前节点
head.next = null; // 断开当前节点与后续节点的关系
return newHead; // 新链表的头节点始终不变
}
```
此递归版本同样可以完成单链表的反转任务[^2]。需要注意的是,在每次递归过程中都需确保断开原有链接以防止形成环形结构。
#### 边界条件考虑
对于输入为空或者仅含单一节点的情况,应直接返回该节点作为结果无需任何额外操作[^3]。
---
###
阅读全文
相关推荐



















