如何递归查找链表中的最大值?

时间:2016-03-23 02:54:57

标签: java recursion linked-list

我需要在列表的头部作为参数递归地找到链表中的最大值。我不知道如何启动方法的递归部分。这就是我到目前为止所做的一切。

int maxOfList(List M){  
    List max = M;
    if(M == null)
        return max;
    if(M.next > max){
        max = M.restOfTheInts;
        return maxOfList();
    }
}

4 个答案:

答案 0 :(得分:0)

在递归中,您经常需要一个入口方法和一个worker方法。 entry方法是允许worker方法在所有情况下都可以工作的特殊情况,而worker会进行递归。

例如,您的工作人员可能是:

int maxOfList(int currentMax, List<int> listToCheck) {
  // Nothing to compare? currentMax is it!
  if (listToCheck == null || listToCheck.size() == 0) return currentMax;

  // Compare and return.
  List<int> restOfList = listToCheck.subList(1, listToCheck.size());
  return maxOfList(Math.max(currentMax, listToCheck.get(0)), restOfList);
}

然后开始,你需要进入方法:

int maxOfList(List<int> listToCheck) {
  return maxOfList(Integer.MIN_VALUE, listToCheck);
}

答案 1 :(得分:0)

因此,对于有效工作的递归,您需要在函数内部显示整个上下文。

int maxOfList(List m) {
     if(m.next == null)
          return m;
     int previousMax = maxOfList(m.next);
     if(m > previousMax)
          return m;
     else
          return previousMax;
}

答案 2 :(得分:0)

int maxValue(List m){
   return maxValue(m, Integer.MIN_VALUE);
}

int maxValue(List m, int num){
  if(m.next == null){
     if(m.data > num)
     return num = m.data;
  }
  return maxValue(m.next, num);
}

答案 3 :(得分:0)

这应该非常简单。为了实现递归解决方案,请考虑所有这些步骤:

  • 什么是递归的想法?列表SELECT date_of_order, Qty_Of_Donuts_In_Order.donut_order_id, Customer.customer_id, first_name, last_name, street_address, apt_number, city, st, zip_code, home_phone, mobile_phone, other_phone, qty_of_donuts, Donut.donut_id, name, description, unit_price, unit_price * qty_of_donuts AS line_total, sum(unit_price * qty_of_donuts) AS sub_total, tax, sum(unit_price * qty_of_donuts) * 1.1 AS total, handling_notes FROM Customer JOIN Donut_Order ON Customer.customer_id = Donut_Order.customer_id, Donut_Order JOIN Qty_Of_Donuts_In_Order ON Donut_Order.donut_order_id = Qty_Of_Donuts_In_Order.donut_order_id, Qty_Of_Donuts_In_Order JOIN Donut ON Qty_Of_Donuts_In_Order.donut_id = Donut.donut_id; 的最大值是{L},其中max(Li, {L} - Li)是当前元素;
  • 停止条件是什么?我们知道,如果列表为空,则最大值可能是任何数字都会更大,让我们说Li;
  • 放在一起:所以,最后我们可以说伪代码看起来像这样:

MIN_INT

我假设链接列表的内容位于int maxOfList(List M) { if(M == null) return Integer.MIN_VALUE; int max = maxOfList(M.next); return M.value > max ? M.value : max; } 并指向value中的下一个元素(尾部指向next)。如果您发现任何其他问题,请查看以下帖子:

Finding Max value in an array using recursion

Python: Recursive function to find the largest number in the list