206.反转链表
一、题目
给你单链表的头节点head
,请你反转链表,并返回反转后的链表。
示例一:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例二:

输入:head = [1,2]
输出:[2,1]
示例三:
输入:head = []
输出:[]
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
二、相关链接
- 题目链接:https://leetcode-cn.com/problems/reverse-linked-list/
- 参考题解:https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/
三、解题思路
- 解法:链表
- 思路:遍历链表,并同时将当前的结点反转
- 步骤:以1->2->3->4->5为例
- 1.定义
tail
作为反转后链表的最后一个结点 - 2.遍历
head
直到null- a.局部变量
next
存放head
的下一个结点head.next
- b.
head
指向反转链表的头结点tail
- c.重置
tail
为head
- d.重置
head
为next
(a步骤)
- a.局部变量
- 3.输出
tail
- 1.定义
四、代码
java
/**
* 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; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
//思路:拿到下一个结点后反转当前结点(最后指向tail)
ListNode tail = null;
//例子:1->2->3->4->5
while(head!=null) {
//获取head后面的结点(如1->2)
ListNode next = head.next;
//重置head的next(反转,1->null)
head.next = tail;
//重置tail的位置(为上一句head)
tail = head;
//重置head为后面的结点(如1->2)
head = next;
}
return tail;
}
}
五、执行结果
执行结果:通过
执行用时:0 ms
, 在所有Java
提交中击败了100.00%
的用户
内存消耗:38.4 MB
, 在所有Java
提交中击败了20.41%
的用户
通过测试用例:28/28
六、总结
- 难度:简单
- 总结:典型的链表算法,相关next操作比较容易混,建议画图(一开始没画图导致有些许步骤混淆,有必要记录)