无参递归单链表长度计算函数工作原理解析求助
递归计算单链表长度的逻辑解析
先看这段递归计算单链表长度的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
相关产品推荐
相关产品推荐

