LeetCode: 225. Implement Stack using Queues
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.
Notes:
- You must use only standard operations of a queue -- which means only
push to back,peek/pop from front,size, andis emptyoperations 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).
题目大意就是用Queue来实现Stack的功能,包括push,pop,top,empty
分析:
Stack:先进后出
Queue:先进先出
可以用两个Queue来轮流存储数据,当执行pop,top等指令时,因为要返回Queue中最后一个element,所以把之前的所有elements压到另外一个空queue中,剩下唯一一个element的时候,实现poll返回。依次交替
注意事项:pop,top等取出行为,要先检查两个queue是不是都为空
class MyStack { private Queue<Integer> q1 = new LinkedList<>(); private Queue<Integer> q2 = new LinkedList<>(); // Push element x onto stack. public void push(int x) { if (q1.isEmpty()) { q2.offer(x); } else { q1.offer(x); } } // Removes the element on top of the stack. public void pop() { if (q1.isEmpty() && q2.isEmpty()) { return; } if (q1.isEmpty()) { while (q2.size() > 1) { q1.offer(q2.poll()); } q2.poll(); } else { while (q1.size() > 1) { q2.offer(q1.poll()); } q1.poll(); } } // Get the top element. public int top() { int res = 0; if (q1.isEmpty() && q2.isEmpty()) { return res; } if (q1.isEmpty()) { while (q2.size() > 1) { q1.offer(q2.poll()); } res = q2.poll(); q1.offer(res); return res; } else { while (q1.size() > 1) { q2.offer(q1.poll()); } res = q1.poll(); q2.offer(res); } return res; } // Return whether the stack is empty. public boolean empty() { return q1.isEmpty() && q2.isEmpty(); } }

浙公网安备 33010602011771号