【发布时间】:2017-03-29 22:07:30
【问题描述】:
我需要在一个名为 Node 的类中编写一个名为 findMax 的 Java 方法,该类有两个实例变量:int value 和 Node next。该方法不带参数,并且必须返回链表的最大值。在程序的上下文中,该方法将始终由链表的第一个节点调用(递归调用除外)。当我不小心找到一个可行的解决方案时,我正在努力完成该方法:
public int findMax(){
int max = value;
if(next == null){
return max;
}
else{
if(max <= next.findMax()){
max = next.value;
}
else return max;
}
return next.findMax();
}
这个方法正确地返回了我测试过的每个链表的最大值。但是,由于我通过尝试随机排列代码找到了这个解决方案,所以我真的不觉得我理解这里发生了什么。谁能向我解释这是如何/为什么起作用的?另外,如果有更高效的解决方案,将如何实现?
【问题讨论】:
-
您的代码可以工作,但看起来好像是侥幸,这很好,因为您承认这就是您让它工作的方式。当前形式的效率非常低(相对于输入大小增长的指数时间增加)。你不想在这里调用
findMax()两次,每次调用findMax()都需要遍历整个列表。我将在我的回答中添加一条说明为什么它不好以及如何调整您的解决方案
标签: java recursion methods linked-list nodes