力扣-反转链表
目录
🔗 题目链接
给你单链表的头节点 head,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
输出:[]
提示:
- 链表中节点的数目范围是 $[0, 5000]$
- $-5000 <= Node.val <= 5000$
双指针迭代
我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。1
- 第二个指针
cur指向head,然后不断遍历cur。 - 每次迭代到
cur,都将cur的next指向pre,然后pre和cur前进一位。 - 都迭代完了(
cur变成null了),pre就是最后一个节点了。
动画演示如下:
动画演示中其实省略了一个 tmp 变量,这个 tmp 变量会将 cur 的下一个节点保存起来。
|
|
复杂度分析2
- 时间复杂度:$O(n)$
- 空间复杂度:$O(1)$