Skip to content

反转链表 ​

难度:⭐⭐ 面试基础必会 ​

考点 ​

  • 链表指针操作
  • 迭代 vs 递归
  • 字节面试手撕高频题

题目描述 ​

给你单链表的头节点 head,请你反转链表,并返回反转后的链表头节点。

函数签名 ​

go
func reverseList(head *ListNode) *ListNode

示例 ​

输入:1 -> 2 -> 3 -> 4 -> 5
输出:5 -> 4 -> 3 -> 2 -> 1

输入:nil
输出:nil

要求 ​

  1. 实现迭代解法
  2. 时间复杂度 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
}

持续学习,持续构建。