我试图递归地实现这个,但我不确定为什么这段代码不起作用(假设我有一个正确返回的长度函数):
Node findk(Node head, int k) {
if (node_length(head)==k) {
return head; }
else {
return findk(head.next, k-1);}}
谢谢!
答案 0 :(得分:0)
您的代码存在两个问题:
k
,null
之前点击k
。这是一个可能的解决方案:
Node findk(Node head, int k) {
if (head == null) return null;
if (node_length(head)==k) return head;
return findk(head.next, k);
}
请注意,此解决方案是O(n 2 ),因为node_length
必须为O(1),才会为列表的每个N-k
节点调用。有几种方法可以更快地完成它 - 例如,通过查找int m = node_length(head)
,然后从列表的开头返回(m-k)
个节点。
答案 1 :(得分:0)
如果你想从最后找到K'元素你正在递减错误的K值,正确的代码如下:
Node findk(Node head, int k) {
if (node_length(head)==k) {
return head;
} else {
return findk(head.next, k);
}
}
另外,我希望你的node_length()方法处理传递给它的Node的场景。