java堆栈pop函数
我正在研究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();
}
}
# 1 楼答案
区别在于指针
一旦从堆栈中弹出一个元素,指针就会移动到堆栈中的下一个元素。在本例中,第一个代码是先窥视然后弹出,而第二个代码是先弹出元素然后尝试窥视
如果查看https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html,您将看到当调用
pop()
时(即使它在if
语句中),它将弹出该元素并将指针移动到下一个元素# 2 楼答案
如果将表达式展开为解析步骤,第一个步骤就是这样做的:
这就是第二个正在做的:
您的第一个代码示例首先评估peek,并将其与pop进行比较,因此它会将最上面的项与自身进行比较。第二个做弹出,然后偷看,比较两个不同的项目
尝试运行调试器并在每个步骤后检查列表