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

递归链表反转算法基准返回值解析及代码逻辑疑问咨询

递归反转链表:拆解你困惑的最后几行逻辑

我来一步步给你捋清楚这个递归过程,帮你搞懂smallans的变化和最后四行的作用~

先明确我们要反转的链表是:1 → 2 → 3 → NULL

第一步:递归触达基准情况

当递归调用到reverse_linked_list_rec(3)时,head->next == NULL(因为3的下一个是NULL),所以直接返回head也就是节点3。这个返回值会作为上一层调用的smallans。

第二步:回到head=2的调用层

此时:

  • smallans = 刚才返回的节点3(不是你以为的2哦!smallans永远是反转后的链表的头节点,也就是原链表的尾节点)
  • tail = head->next → 也就是节点3
  • tail->next = head → 把节点3的next指向节点2,现在链表变成3 → 2
  • head->next = NULL → 把节点2的next设为NULL,避免循环,现在链表是3 → 2 → NULL
  • 最后返回smallans(节点3),这个值会传到上一层head=1的调用里。

第三步:回到head=1的调用层

此时:

  • smallans = 节点3
  • tail = head->next → 节点2
  • tail->next = head → 节点2的next指向节点1,链表变成3 → 2 → 1
  • head->next = NULL → 节点1的next设为NULL,最终链表是3 → 2 → 1 → NULL
  • 返回smallans(节点3),这就是反转后的链表的头节点。

为什么要返回smallans?

因为smallans从递归的最底层(原链表的尾节点)开始,每一层递归都把它传递回去——它始终是反转后链表的头节点。如果不返回它,上层调用就拿不到反转后的链表的入口啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:38:00