最小栈 leetcode 232.
题目大意:仅使用两个栈实现一个队列,要求实现push、pop、peek、empty
解题思路:栈和队列刚好想法,队列是先进先出,设定a队列正常存放,b队列存放倒序,push的操作正常存放进a队列,pop的操作需要倒序,peek也需要倒序,将判断方法放置于peek中,peek操作不会操作具体队列,需要判定三个情况,b队列有值那就是b队列的peek值,否则判断a队列是否有值,都没有就是空的,最后就是将a队列的值pop出来push进b队列实现倒序存储,empty方法就是两个队列均为空,pop的话,首先执行一下peek函数,作为最终返回值,在这中间需要将b队列执行一下pop操作。
题解及注释:
class MyQueue {
private Stack<Integer> a;
private Stack<Integer> b;
public MyQueue() {
a = new Stack<Integer>();
b = new Stack<Integer>();
}
public void push(int x) {
a.push(x);
}
public int pop() {
int peek = peek();
b.pop();
return peek;
}
public int peek() {
if (!b.empty()) return b.peek();
if (a.empty()) return -1;
while (!a.empty()) {
b.push(a.pop());
}
return b.peek();
}
public boolean empty() {
return a.empty() && b.empty();
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/
总结:题解写出来后其实基本上都已经熟悉了,为什么pop的时候不直接返回b.pop(),因为特殊情况只是在peek()做了处理,但是返回值是存放在pop()中的peek值里的,所以最终要返回该peek值
标签:peek,队列,1201,pop,int,用栈,push,empty From: https://www.cnblogs.com/hgao/p/18579749