思路:用两个栈p,q,其中一个栈p用于存储数据,另一个栈q用于p在push时候的数据临时存储,p压入新数据时,先把其中的数据临时放入q,然后将新数据放入p,再将q中的数据按顺序压入p.
代码:
Java:
class MyQueue { Stack<Integer> p=new Stack<>(); Stack<Integer> q=new Stack<>(); /** Initialize your data structure here. */ public MyQueue() { } /** Push element x to the back of queue. */ public void push(int x) { while(!p.empty()){ q.push(p.lastElement()); p.pop(); } p.push(x); while(!q.empty()){ p.push(q.lastElement()); q.pop(); } } /** Removes the element from in front of queue and returns that element. */ public int pop() { int res=p.lastElement(); p.pop(); return res; } /** Get the front element. */ public int peek() { return p.lastElement(); } /** Returns whether the queue is empty. */ public boolean empty() { return p.empty(); } }
C++:
class MyQueue { public: stack<int> p,q; /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { while(!p.empty()){ q.push(p.top()); p.pop(); } p.push(x); while(!q.empty()){ p.push(q.top()); q.pop(); } } /** Removes the element from in front of queue and returns that element. */ int pop() { int res=p.top(); p.pop(); return res; } /** Get the front element. */ int peek() { return p.top(); } /** Returns whether the queue is empty. */ bool empty() { return p.size()==0; } };