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

无参递归单链表长度计算函数工作原理解析求助

递归计算单链表长度的逻辑解析

先看这段递归计算单链表长度的Java代码:

public int length() {
    if (tail == null) {
        return 1;
    }

    return 1 + tail.length();
}

针对你的两个疑问,直接拆解逻辑:

问题1:最后一个对象返回1,为何最终结果不是1?

最后一个节点的tail为null时确实返回1,但这个返回值会被它的上一个节点的递归调用接收。举个具体例子:
假设链表是节点A → 节点B → 节点C(C的tail为null):

  • 调用A.length()时,A的tail是B,所以执行1 + B.length()
  • 调用B.length()时,B的tail是C,所以执行1 + C.length()
  • 调用C.length()时,tail为null,返回1
  • 然后B的计算结果是1 + 1 = 2,A的计算结果是1 + 2 = 3
    最终回到最初的调用,得到的就是整个链表的总长度,而不是最后一个节点返回的1。

问题2:1 + tail.length()的具体作用是什么?

  • 这里的1是当前节点的计数(每个节点本身占一个长度单位)
  • tail.length()是递归调用下一个节点的length()方法,用来获取从下一个节点到链表末尾的总长度
    把这两部分相加,就能得到从当前节点开始到链表末尾的总长度。当你从链表的第一个节点调用这个方法时,最终得到的就是整个链表的总长度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:20:40