使用递归Java从链表中获取最大值

时间:2016-03-23 04:45:48

标签: java

我试图使用递归和linked list

来获取最大值
  public static int maxOfMyList(MyListOfInts M){
    int max = M.restOfTheInts.firstInt;
    if(M == null) {
        return max;
    }
    if(M.firstInt > max ) {
        max = M.firstInt;
    }
    return  maxOfMyList(M.restOfTheInts);
}

但是我在Java.lang.NullPointerException的声明中获得了int

提前致谢

3 个答案:

答案 0 :(得分:1)

这里的想法是将链表节点传递给递归树。将子递归调用返回的值与当前节点值进行比较,并在递归树中向上扩展两个中的较大值。这样,您最终将获得列表中的最大值。

free

调用上面的函数传递LinkedList的int FindMax (ListNode node) { if (node == null) { return -1; /* Can be a big negative number */ } int x = FindMax (node.next()); int max = (x > node.getKey()) ? (x): (node.getKey()); return max; }

答案 1 :(得分:0)

使用第一个元素

调用该函数
public static int maxOfMyList(MyListOfInts M){
    if(M==null){
        return Integer.MIN_VALUE;
     }
    //last element
    if( M.next()==null){
        return M.value();//return current value; 
     } 
    return Math.max( M.value(),maxOfMyList(M.next()))
}

假设:next()将指向下一个元素,value()将返回当前元素的值。

没有数学。

 public static int maxOfMyList(MyListOfInts M,int currentMax){
    if(M==null){
        return currentMax;
     }

     currentMax = M.value()>currentMax?M.value():currentMax;
    //last element
    if( M.next()==null){
        return  currentMax;
     } 

    return  maxOfMyList(M.next()),currentMax)
}

调用该函数,

maxOfMyList(M,M.value());

答案 2 :(得分:0)

由于AJB的帮助,我得到了它的工作。

 public static int maxOfMyList(MyListOfInts M){


    if(M.firstInt > M.restOfTheInts.firstInt ) {
         return M.firstInt;
    }else{
        return maxOfMyList(M.restOfTheInts);
    }


}

感谢您的帮助!