
思路1 迭代法
核心思路
- 双指针协作:
pre 指向当前节点的前一个节点(初始为 null)。
cur 指向当前处理的节点(初始为头节点 head)。- 迭代过程: 保存当前节点的下一个节点 temp。
将当前节点的 next 指针指向前一个节点 pre(反转方向)。 移动 pre 和 cur指针,继续处理下一个节点。- 终止条件: 当 cur 遍历到链表末尾(null)时,pre 即为新的头节点。
java
ListNode pre = null;// 前一个节点,初始为null
ListNode cur = head; // 当前节点,初始为头节点
while (cur != null) {
// 1. 保存当前节点的下一个节点
ListNode temp = cur.next;
// 2. 将当前节点的next指向前一个节点(反转方向)
cur.next = pre;
// 3. 移动pre和cur指针
// pre 移动到当前节点
pre = cur;
// cur 移动到之前保存的下一个节点
cur = temp;
}
// 4. 返回新的头节点(即原链表的尾节点)
return pre;
2.递归法
java
// 1. 递归终止:空链表或单节点链表
while (head == null || head.next == null) {
return head;
}
// 2. 递归反转后续节点,获取新头节点
ListNode result = reverseList(head.next);
// 3. 修改指针方向(核心操作)
// 让后续节点指向当前节点
head.next.next = head;
// 切断当前节点的原next指向
head.next = null;
// 4. 返回新头节点
return result;