手撕:反转链表。

算法工程师第 1 / 15 题答题框架
参考思路:迭代三指针(prev/curr/next)逐段反转→边界(空表/单节点)→可追问递归写法与 O(n) 栈开销。先讲思路再写,写完主动走一个用例。

五个经典回答示范

回答一 · 思路口述版

「我用迭代三指针:prev 初始为 null,curr 指向头。每步先存下 curr.next 防断链,然后把 curr.next 指向 prev,再整体右移 prev 和 curr。curr 为空时 prev 就是新头。」面试我会边写边讲不变量:任意时刻 prev 链表已完成反转、curr 链表保持原序,循环结束两者恰好接管全部节点。

回答二 · 标准写法

迭代版:function reverse(head) { let prev=null, cur=head; while(cur){ const nxt=cur.next; cur.next=prev; prev=cur; cur=nxt; } return prev; } 时间 O(n) 空间 O(1)。写完主动过用例:空表返回 null、单节点返回自身,并说明循环体三次指针赋值的顺序不能乱——先备份 next 是关键。

回答三 · 进阶变体

追问每 k 个一组反转:先数够 k 个,对这段做局部反转(复用三指针,尾接下一组递归或迭代返回的头),不足 k 保持原序。要点是分组前的计数与边界衔接。另一个变体是反转部分区间 m 到 n:一次遍历到 m-1 记锚点,区间内反转后重接。能主动提变体体现刷题深度。

回答四 · 边界与测试

必测:空链表、单节点、两节点、全部相同的值、k=1、k 等于长度、k 大于长度。面试时写完先口头跑一个 1→2→3→4 的例子,把四轮循环的指针变化说一遍,主动发现错位 bug 比被面试官指出好得多。

回答五 · 常见错误

经典错误一:不备份 next 就改 curr.next,后半段链表丢失成环。错误二:返回 head——反转后 head 是尾节点,必须返回 prev。错误三:递归版空间说成 O(1)——递归栈是 O(n)。点评:这题是面试热身题,指针顺序错说明手生,建议写前先在纸上画三个指针。

怎么练这道题
  1. 打开 模拟练习,选择「算法工程师」方向,限时 3 分钟作答本题。
  2. 对照上方答题框架,逐点检查:哪些要素没覆盖、哪里表达啰嗦。
  3. 用自己项目的真实经历替换框架中的占位内容,重讲一遍并录音回听。

这类题在真实面试中常被追问细节,
建议进入限时模式练一遍。

开始限时演练