我正在研究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();
}
}
答案 0 :(得分:2)
不同之处在于指针。
从堆栈中弹出一个元素后,指针将移动到堆栈中的下一个元素。在这种情况下,第一个代码首先偷看然后弹出,而第二个代码首先弹出元素然后试图窥视。
如果您查看https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html,您会看到pop()
被调用时(即使它在if
语句中),它会弹出该元素,将指针移动到下一个元素。
答案 1 :(得分:2)
如果将表达式扩展到解析步骤中,这就是第一个表达式:
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进行比较,以便将顶部项与自身进行比较。第二个是pop,然后是peek,比较两个不同的项目。
尝试运行调试器并在每个步骤后检查列表