【发布时间】:2021-08-05 23:25:14
【问题描述】:
我正在准备堆栈考试,并且正在练习有关堆栈的各种方法。我试图实现一个返回堆栈中最大值的方法,但我有点困惑。
我应该移除this 的栈顶并将其推入新的栈s1,然后将this.stackTop 与s1.stackTop 进行比较。
这是我的代码:
Stack s1 = new Stack();
if(this.isEmpty()) {
System.out.println("the stack is empty ");
return NOT_FOUND;
}
while(!this.isEmpty() && this.stackTop() > s1.stackTop()) {
s1.push(this.stackTop());
this.pop();
}
while(!s1.isEmpty()) {
this.push(s1.stackTop());
s1.pop();
}
}
我只是很困惑,不知道如何继续,所以任何帮助将不胜感激。
【问题讨论】:
-
您的逻辑已关闭。我们需要第二个堆栈来“记录”第一个堆栈中的内容,因此必须弹出第一个堆栈的每个元素,然后将其推送到第二个堆栈。这样做时,我们可以在单个
int变量中“记录”最大值(假设Stack是 int`s 的Stack)。第一次迭代后,我们需要将第二个堆栈中的所有元素添加回第一个堆栈,以恢复我们之前的状态。 -
你为什么要比较
this.stackTop() > s1.stackTop()。没有意义。您应该不断弹出堆栈直到它变空,并将最大值存储在一个变量中。 -
逻辑与在数组中查找最大元素相同。
-
@SauravKumar 考虑我从初始堆栈中弹出所有元素(1 x 1)并将它们推入另一个堆栈
s1,我应该如何比较这些元素? -
回答您的问题,在弹出时,您必须将元素与当前最大的元素(将存储在变量中)进行比较。最初,最大的元素是 MIN_INT。
标签: java linked-list stack