[英]Java using backward recursion for linked lists
因此,我尝试从末尾查找最后五个的位置。
这是我的代码:
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");
外部有变量result
,将其初始化为负值,就像列表中没有5
。 循环浏览链接列表而无需递归,如果节点等于5
则将其position
保存在result
。 由于您将覆盖此值,因此结果将始终保留最后5
。
要从最后一个节点获取索引位置( result
从第一个节点获取索引),只需执行length-result+1
, length-result
或length-result-1
(取决于代码的编写方式),无论哪种情况当最后5
是最后一个节点时,公式将返回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是最后一个位置的匹配
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.