标签:
Implement the following operations of a stack using queues.
Notes:
push to back
, peek/pop from front
, size
, and is empty
operations are valid.
题目大意就是用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(); } }
LeetCode: 225. Implement Stack using Queues
标签:
原文地址:http://www.cnblogs.com/snakech/p/5757856.html