Implement the following operations of a stack using queues.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- empty() -- Return whether the stack is empty.
- You must use only standard operations of a queue -- which means only
push to back
,peek/pop from front
,size
, andis empty
operations are valid. - Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
- You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
- 思路:用两个队列来实现栈的操作
- 1 对于push() 判断队列1是否为空,为空直接加进去,不为空,则将队列1中的元素依次出队,再依次入队列2,将新的元素插入队列1,然后再将队列2中的元素插入队列1
- 2对于pop() 由于1中的push操作已经把后进的元素放在队头,所以直接queue1.remove()即可。
- 3对于top()同理peek即可
- 4对于empty同理isempty即可
- 代码如下(已通过leetcode)
- class MyStack {
// Push element x onto stack.
Queue<Integer> queue1= new LinkedList<Integer>();
Queue<Integer> queue2= new LinkedList<Integer>();
public void push(int x) {
if(queue1.isEmpty()) queue1.add(x);
else {
while(!queue1.isEmpty())
queue2.add(queue1.remove());
queue1.add(x);
while(!queue2.isEmpty())
queue1.add(queue2.remove());
}
}
// Removes the element on top of the stack.
public void pop() {
queue1.remove();
}
// Get the top element.
public int top() {
return queue1.peek();
}
// Return whether the stack is empty.
public boolean empty() {
return queue1.isEmpty();
}
}