我正在研究Leetcode上的一个算法问题,我发现这两个不同的pop()函数给了我不同的结果。(当然其中一个不起作用)我不明白这有什么区别。为什么创建一个int会起作用,而另一个不起作用?
public void pop() {
if ( minStack.peek() == mainStack.pop()) {
minStack.pop();
}
}和
public void pop() {
int popValue = mainStack.pop();
if (minStack.peek() == popValue) {
minStack.pop();
}
}发布于 2016-01-26 21:53:34
不同之处在于指针。
一旦从堆栈中弹出一个元素,指针就会移动到堆栈中的下一个元素。在这种情况下,第一段代码先看然后弹出,而第二段是先弹出元素,然后尝试查看。
如果您查看https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html,您将看到当调用pop()时(即使它在if语句中),它将弹出该元素并将指针移动到下一个元素。
发布于 2016-01-26 21:54:20
如果将表达式展开到解析步骤中,第一个步骤是这样做的:
public void pop() {
int a = minStack.peek();
int b = mainStack.pop();
boolean e = (a == b);
if (e) {
minStack.pop();
}
}这就是第二个人正在做的事情:
public void pop() {
int a = mainStack.pop();
int b = minStack.peek();
boolean e = (a == b);
if (e) {
minStack.pop();
}
}您的第一个代码示例首先计算peek,并将其与pop进行比较,因此它将顶部项与其自身进行比较。第二种是弹出,然后是窥视,比较两个不同的项目。
尝试运行调试器并在每一步之后检查列表
https://stackoverflow.com/questions/35024566
复制相似问题