题目
给你单链表的头节点 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
引用指向
分析
主要思路就是,在遍历链表每个结点的同时,将next指针指向前一个结点(如果是头节点则指向null),这样就完成了链表反转;
- 首先初始化cur为头节点,pre为null
- 暂存后继节点:声明一个tmp用来存放后继节点
- 修改引用指向:将cur的next指向null
- 暂存当前节点:将cur给pre,完成第一次反转
- 访问下一节点:第一步tmp存的是刚开始cur的后继节点,将tmp给cur即可完成访问下一节点
后续同理,直到cur为空,跳出;返回pre即可(反转后的头节点)
代码
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode pre = null;
while (cur!= null) {
ListNode tmp = cur.next; // 暂存后继结点
cur.next = pre; // 修改引用指向
pre = cur;// 暂存当前结点
cur = tmp; // 访问下一节点
}
return pre;
}
}