我正在阅读编码采访书。虽然涵盖了链接列表主题,但我遇到了问题2.我能够提出一个非递归版本并且工作正常。然而,当我试图翻阅书籍解决方案时,我无法理解解决方案。我想知道是否有人可以帮我解决这个问题?
public static int nthToLast(SListNode head, int k){
if(head == null){
return 0;
}
int i = nthToLast(head.next, k) +1;
System.out.println("Node data is: " + head.item);
System.out.println("i is: " +i);
System.out.println("k is: " + k);
if(i<=k){
System.out.println(head.item);
}
return i;
}
所以在这段代码中,我相信int i = nthToLast(head.next,k)代码的+1行确保头指针指向最后一个节点。但是我无法理解通过这一行从第一个节点到最后一个节点的指针变化背后的机制。任何人都可以帮助我理解这行代码以及它如何将指针从链表的第一个节点更改为最后一个节点?
答案 0 :(得分:1)
这个函数将自己传递到下一个头,直到最后一个头它将为null,因此返回零,所以你有很多函数调用,这取决于最后一个空头来评估为零。一旦到达最后一个头,最后我可以被评估为0 + 1,然后打印i和K,i(现在是1)被传递到待处理函数调用变为1 + 1然后打印新的i + k和等等,直到你到达初始指针