簡體   English   中英

如何遞歸地在鏈表中找到最大值?

[英]How to find the maximum value in a linked list recursively?

我需要在列表的頭部作為參數遞歸地找到鏈表中的最大值。 我不知道如何啟動方法的遞歸部分。 到目前為止,這就是我所擁有的。

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

在遞歸中,您經常需要一個入口方法和一個worker方法。 進入方法是一種特殊情況,它允許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);
}

因此,對於有效工作的遞歸,您需要在函數內部顯示整個上下文。

int maxOfList(List m) {
     if(m.next == null)
          return m;
     int previousMax = maxOfList(m.next);
     if(m > previousMax)
          return m;
     else
          return previousMax;
}
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);
}

這應該非常簡單。 為了實現遞歸解決方案,請考慮以下所有步驟:

  • 遞歸的想法是什么? 列表{L}max(Li, {L} - Li)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 (尾指向null )。 如果您發現任何其他問題,請查看以下帖子:

使用遞歸查找數組中的最大值

Python:遞歸函數,用於查找列表中的最大數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM