206. 反转链表
题目描述:
给你单链表的头节点 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 指针改为指向前一个元素。由于节点没有引用其上一个节点,因此必须事先存储其前一个元素。
在更改引用之前,还需要存储后一个节点。
最后返回新的头节点。
func reverseList(head *ListNode) *ListNode {
var pre *ListNode = nil
for head != nil {
next := head.Next
head.Next = pre
pre = head
head = next
}
return pre
}
复杂度:
- 时间复杂度:O(N),其中 N 是链表的节点数量。
- 空间复杂度:O(1),只使用常数额外空间。
执行结果:
- 执行耗时:2 ms,击败了28.73% 的Go用户
- 内存消耗:2.4 MB,击败了99.64% 的Go用户
Tags :
通过次数 2.1M 提交次数 2.8M 通过率 75.2%