所以我试着从最后找到最后五个位置。
这是我的代码:
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");
答案 0 :(得分:0)
外部有变量result
,初始化为负值,就好像列表中没有5
一样。如果节点等于5
,则在没有递归的情况下循环链接列表,然后将position
保存在result
上。由于您将覆盖此值,因此结果始终保留最后一个5
。
要从最后一个节点获取索引位置(result
具有来自第一个节点的索引),只需执行length-result+1
,length-result
或length-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是最后位置的命中