Java 查找链接列表最后一个元素的第k个

Java 查找链接列表最后一个元素的第k个,java,recursion,linked-list,Java,Recursion,Linked List,我试图递归地实现这一点,但我不确定为什么这段代码不起作用(这是假设我有一个正确返回的长度函数): 谢谢 您的代码有两个问题: 您不应该在列表中递减k,并且 当列表太短时,在到达k-th元素之前,应注意点击null 以下是一个可能的修复方法: Node findk(Node head, int k) { if (head == null) return null; if (node_length(head)==k) return head; return findk(h

我试图递归地实现这一点,但我不确定为什么这段代码不起作用(这是假设我有一个正确返回的长度函数):


谢谢

您的代码有两个问题:

  • 您不应该在列表中递减
    k
    ,并且
  • 当列表太短时,在到达
    k
    -th元素之前,应注意点击
    null
以下是一个可能的修复方法:

Node findk(Node head, int k) {
    if (head == null) return null;
    if (node_length(head)==k) return head;
    return findk(head.next, k);
}

请注意,此解决方案是O(n2),因为列表中的每个
N-k
节点都会调用
node\u length
,它必须是O(1)。有几种更快的方法,例如,通过查找
int m=node_length(head)
,然后从列表开始返回
(m-k)
-第th个节点。

如果要从末尾查找第k个元素,则递减错误的k值,正确的代码如下:

Node findk(Node head, int k) {
  if (node_length(head)==k) {
    return head; 
  } else {
    return findk(head.next, k);
  }
}

我还希望node_length()方法能够处理传递给它的节点为null的情况。

需要返回什么?第K个元素的位置?你是在旋转到无限递归吗?当head.next为null时会发生什么?有堆栈跟踪吗?你说的不工作是什么意思?您是从开始还是结束查找第K个元素?堆栈上是否存在任何可能出现的问题?我正在阅读破解编码访谈,作者说我们不能“通过堆栈传递节点”来回答这个问题recursively@honeysingh这里与堆栈相关的最大问题是当列表太长时堆栈溢出。但是,如果编译器执行尾部调用优化,则不会出现问题。
Node findk(Node head, int k) {
  if (node_length(head)==k) {
    return head; 
  } else {
    return findk(head.next, k);
  }
}