【发布时间】:2022-01-04 03:19:04
【问题描述】:
我是 Java 新手,目前正在阅读“Cracking the Coding Interview”一书以及他们使用 Wrapper Class 在链表中查找第 k 个最后一个元素的方法。我一直在查看代码,但不确定发生了什么。
class Index{
public int value = 0;
}
LinkedListNode kthToLast(LinkedListNode head, int k){
Index idx = new Index();
return kthToLast(head, k, idx);
LinkedListNode kthToLast(LinkedListNode head, int k, Index idx){
if(head == null){
return null;}
LinkedListNode node = kthToLast(head.next, k, idx);
idx.value = idx.value + 1;
if (idx.value == k){
return head;
}
return node;
}
有人能解释一下这段代码发生了什么吗?这似乎很混乱。 另外,为什么有 2 个函数 kthToLast 传入不同数量的参数? (最初是 2 个参数,然后是 3 个参数)。
另外对于kthToLast的递归,我很困惑该行之后的代码如何
LinkedListNode node = kthToLast(head.next, k, idx);
将执行,因为它将递归调用自身,并且后续代码将在所有递归调用完成后的某个时间运行。
最后,为什么我们要返回 head return head 以及返回节点 return node ?
如果有人能够解释这段代码中发生的事情的完整过程(以及为什么使用书中所述的 Wrapper 类),我将不胜感激。谢谢!
【问题讨论】:
标签: java recursion linked-list wrapper