反转链表
难度:⭐⭐ 面试基础必会
考点
- 链表指针操作
- 迭代 vs 递归
- 字节面试手撕高频题
题目描述
给你单链表的头节点 head,请你反转链表,并返回反转后的链表头节点。
函数签名
go
func reverseList(head *ListNode) *ListNode示例
输入:1 -> 2 -> 3 -> 4 -> 5
输出:5 -> 4 -> 3 -> 2 -> 1
输入:nil
输出:nil要求
- 实现迭代解法
- 时间复杂度 O(n),空间复杂度 O(1)
提示
- 用三个指针:prev、curr、next
- 每次将 curr.Next 指向 prev,然后三个指针同时前进
参考答案(Go)
点击展开参考答案
go
//go:build ignore
package answer
type ListNode struct {
Val int
Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
var prev *ListNode
curr := head
for curr != nil {
next := curr.Next
curr.Next = prev
prev = curr
curr = next
}
return prev
}