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

时间:2015-01-09 19:39:11

标签: java recursion linked-list

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

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

谢谢!

2 个答案:

答案 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的场景。