思路:每次push的时候就将数据放在q1,每当要top(),pop()的时候,就将q1的数据一次取出放到q2,剩最后一个元素的时候不再将他放入q2而是直接扔掉,这样q1就空了,而q2非空,下一次pop或top的时候就将q2的数据取出放到q1,剩最后一个元素不将其放入q1,而是直接丢弃。
#include<queue>
class MyStack {
public:
/** Initialize your data structure here. */
queue<int> q1,q2;
int length=0;
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
if(q1.empty()&&q2.empty())
{
q1.push(x);
}
else if(q1.empty()&&!q2.empty())
{
q2.push(x);
}
else if(q2.empty()&&!q1.empty())
{
q1.push(x);
}
length++;
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int res;
if(!q1.empty()){
int l = 0;
while(l<length-1)
{
int t = q1.front();
q2.push(t);
q1.pop();
l++;
}
res = q1.front();
q1.pop();
}
else
{
int l = 0;
while(l<length-1)
{
int t = q2.front();
q1.push(t);
q2.pop();
l++;
}
res = q2.front();
q2.pop();
}
length --;
return res;
}
/** Get the top element. */
int top() {
int res;
if(!q1.empty()){
int l = 0;
while(l<length-1)
{
int t = q1.front();
q2.push(t);
q1.pop();
l++;
}
res = q1.front();
q2.push(res);
q1.pop();
}
else
{
int l = 0;
while(l<length-1)
{
int t = q2.front();
q1.push(t);
q2.pop();
l++;
}
res = q2.front();
q1.push(res);
q2.pop();
}
return res;
}
/** Returns whether the stack is empty. */
bool empty() {
if(length==0)return true;
else return false;
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/