You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归反转单链表疑惑:为何reverse.next不生效而head.next.next可行?

递归反转单链表的困惑解答

你搞混了reverse变量的实际含义——它从始至终都是反转后链表的头节点(也就是原链表的最后一个节点),不是当前head.next反转后的尾节点,这就是为什么reverse.next = head会出错,而head.next.next = head能正常工作的核心原因。

具体拆解递归过程(拿链表 1->2->3->null 举例)

  • 递归终止阶段:
    当递归到head=3时,因为head.next=null,直接返回3,这个3就是反转后的头节点,后续所有上层递归的reverse都会等于这个3。

  • 为什么reverse.next = head不行?

    • 回到head=2的层级,reverse=3,如果执行reverse.next=2,此时链表是3->2,看起来没问题;
    • 但再回到head=1的层级,reverse还是3,执行reverse.next=1就会把3的next改成1,之前的2直接被覆盖,最终链表变成3->1,丢失了中间节点2,彻底错误。
  • 为什么head.next.next = head能正常工作?

    • 回到head=2的层级,head.next是3,head.next.next=head就是把3的next指向2,此时链表变成2<->3;
    • 接着执行head.next=null,断开2指向3的旧连接,链表变成3->2,返回3;
    • 回到head=1的层级,head.next是2,head.next.next=head把2的next指向1,链表变成3->2->1;
    • 再执行head.next=null,断开1指向2的旧连接,最终得到正确的反转链表3->2->1。

核心逻辑总结

递归的每一步只需要处理当前节点和它的直接后继节点的反转关系:让后继节点指向自己,再把自己的next置空(防止出现循环链表)。而reverse作为反转后的头节点,它的后续连接已经在下层递归中逐步构建完成,根本不需要修改它的next属性。

内容的提问来源于stack exchange,提问作者dslash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:45:30