给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
方法一:迭代(双指针)
考虑遍历链表,并在访问各节点时修改 next
引用指向,算法流程见注释。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
public ListNode reverseList(ListNode head) {
// prev是局部变量,不是ListNode类的成员
ListNode prev = null;
ListNode current = head;
while (current != null) {
// 步骤1: 保存下一节点,防止链接断开后丢失
ListNode nextTemp = current.next;
// 步骤2: 反转当前节点的指针
current.next = prev;
// 步骤3: 移动指针
prev = current;
current = nextTemp;
}
return prev; // 新的头节点
}
作者:Krahets 链接:https://leetcode.cn/problems/reverse-linked-list/solutions/2361282/206-fan-zhuan-lian-biao-shuang-zhi-zhen-r1jel/
来源:力扣(LeetCode) 著作权归作者所有。