繁体   English   中英

Java对链表使用向后递归

[英]Java using backward recursion for linked lists

因此,我尝试从末尾查找最后五个的位置。

  • 计算列表中最后一个5.0的位置,并算作到末尾的偏移量。
  • 如果5.0是LAST元素,则位置为0
  • 如果未出现5.0,则返回负数
  • 您可以使用任何样式的循环或递归编写此代码,但您只能使用一个循环或递归助手
  • 提示:使用向后递归。
  • 提示:如果没有出现该数字,请将该距离作为负数返回到列表的末尾。

这是我的代码:

 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+1length-resultlength-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM