问题描述
问题链接:https://leetcode-cn.com/problems/implement-queue-using-stacks/
分析
因为栈和队列的特点不一样,我们用一个栈很难实现,所以需要用两个栈来实现队列。一个栈s1代表入队列,另一个栈s2代表出队列。
- 入队列push():无脑的将元素压入到栈s1当中
- 出队列pop():从栈s2中取栈顶的元素即可,如果栈s2为空的话,判断栈s1是否为空,如果为空的话返回false,如果不为空的话,将栈s1的所有元素都放到栈s2当中,在弹出栈顶元素即可
- 得到队头元素peek():与出队列类似,只是最后返回的是栈顶元素,不弹出罢了。
AC代码
class MyQueue {
private Stack<Integer> s1=new Stack<>();
private Stack<Integer> s2=new Stack<>();
/** Initialize your data structure here. */
public MyQueue() {
}
/** Push element x to the back of queue. */
public void push(int x) {
s1.push(x);
}
/** Removes the element from in front of queue and returns that element. */
public int pop() {
if(empty())
{
return -1;
}
if(empty())
{
return -1;
}
if(!s2.isEmpty())
{
return s2.pop();
}else{
while(!s1.isEmpty())
{
s2.push(s1.pop());
}
return s2.pop();
}
}
/** Get the front element. */
public int peek() {
if(!s2.isEmpty())
{
return s2.peek();
}else{
while(!s1.isEmpty())
{
s2.push(s1.pop());
}
return s2.peek();
}
}
/** Returns whether the queue is empty. */
public boolean empty() {
return s1.isEmpty()&&s2.isEmpty();
}
}