Java使用链接列表的后向递归

时间:2016-10-01 04:55:07

标签: java

所以我试着从最后找到最后五个位置。

  • 计算列表中最后一个5.0的位置,计算为距离结尾的偏移量。
  • 如果5.0是LAST元素,则位置为0
  • 如果未显示5.0,则返回负数
  • 你可以用任何样式的循环或递归来编写它,但你应该只有一个循环或递归助手
  • 提示:使用向后递归。
  • 提示:如果未显示该号码,请将该距离返回到列表的END作为负号。

这是我的代码:

 public int positionOfLastFiveFromEnd () {
    return positionOfLastFiveFromEndHelper (first);
}
 private static int positionOfLastFiveFromEndHelper(Node i) {
    if (i == null) return -1;
    int result = positionOfLastFiveFromEndHelper(i.next);
    result = result -1;
    //if (i.item == 5) 
    //ans = ans +1;
    //return ans;
    return result;
}

我不明白为什么我无法获得5的职位。 当实际存在5时,我的负输出是正确的。 有人可以帮帮我吗。我还必须使用后向递归。

testPositionOfLastFiveFromEnd(-1, "");
testPositionOfLastFiveFromEnd (-2, "11");
testPositionOfLastFiveFromEnd (-5, "11 21 31 41");
testPositionOfLastFiveFromEnd (4, "5 11 21 31 41");
testPositionOfLastFiveFromEnd (3, "11 5 21 31 41");
testPositionOfLastFiveFromEnd (2, "11 21 5 31 41");
testPositionOfLastFiveFromEnd (1, "11 21 31 5 41");
testPositionOfLastFiveFromEnd (0, "11 21 31 41 5");
testPositionOfLastFiveFromEnd (2, "0 1 2 5 5 5 5 5 8 9");

2 个答案:

答案 0 :(得分:0)

外部有变量result,初始化为负值,就好像列表中没有5一样。如果节点等于5,则在没有递归的情况下循环链接列表,然后将position保存在result上。由于您将覆盖此值,因此结果始终保留最后一个5

要从最后一个节点获取索引位置(result具有来自第一个节点的索引),只需执行length-result+1length-resultlength-result-1(它因各种不同而异)关于你如何编写代码),当最后一个0是最后一个节点时,无论哪个公式返回5,都应该是你应该使用的。

答案 1 :(得分:0)

您不会检查您要查找的条件,例如

if (i == null) return -1;
int result = positionOfLastFiveFromEndHelper(i.next);
if (result >= 0) { // five was found
    return result;
}
if (i.item == 5) {
    // return - result; position inclusive the 5
    return -(result+1); // exclusive
}
return result-1;

应该做的伎俩

修改

没有检查返回值的定义,0是最后位置的命中