力扣-反转链表
目录
🔗 题目链接
给你单链表的头节点 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)$