首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >栈pop函数

栈pop函数
EN

Stack Overflow用户
提问于 2016-01-26 21:42:56
回答 2查看 157关注 0票数 1

我正在研究Leetcode上的一个算法问题,我发现这两个不同的pop()函数给了我不同的结果。(当然其中一个不起作用)我不明白这有什么区别。为什么创建一个int会起作用,而另一个不起作用?

代码语言:javascript
复制
public void pop() {
  if ( minStack.peek() == mainStack.pop()) {
    minStack.pop();
  }
}

代码语言:javascript
复制
public void pop() {
  int popValue = mainStack.pop();
  if (minStack.peek() == popValue) {
    minStack.pop();
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-26 21:53:34

不同之处在于指针。

一旦从堆栈中弹出一个元素,指针就会移动到堆栈中的下一个元素。在这种情况下,第一段代码先看然后弹出,而第二段是先弹出元素,然后尝试查看。

如果您查看https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html,您将看到当调用pop()时(即使它在if语句中),它将弹出该元素并将指针移动到下一个元素。

票数 1
EN

Stack Overflow用户

发布于 2016-01-26 21:54:20

如果将表达式展开到解析步骤中,第一个步骤是这样做的:

代码语言:javascript
复制
public void pop() {
  int a = minStack.peek();
  int b = mainStack.pop();
  boolean e = (a == b);
  if (e) {
    minStack.pop();
  }
}

这就是第二个人正在做的事情:

代码语言:javascript
复制
public void pop() {
  int a = mainStack.pop();
  int b = minStack.peek();
  boolean e = (a == b);
  if (e) {
    minStack.pop();
  }
}

您的第一个代码示例首先计算peek,并将其与pop进行比较,因此它将顶部项与其自身进行比较。第二种是弹出,然后是窥视,比较两个不同的项目。

尝试运行调试器并在每一步之后检查列表

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35024566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档