剑指Offer05 用两个栈实现一个队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
对于使用的两个队列,一个用以做插入操作,即push, 另一个用以做删除操作。在没有pop操作时,可以一直向stack1中压栈,而stack1中反序就是队列的顺序,当有pop(出队)操作时,再判断stack2是否为空, 不为空直接出栈,若为空则将stack1中的元素逐个出栈并压入stack2。
代码
class Solution
{
public:
void push(int node) { //对于push操作直接在stack1中压栈
stack1.push(node);
}
int pop() { //对于出栈操作,若stack2非空,直接出栈
if(!stack2.empty()){
int res = stack2.top();
stack2.pop();
return res;
}else if(!stack1.empty()){ //若stack2空且stack1还有数据,则stack1逐个元素出栈再压入 //stack2,这样便保证了先进先出
while(!stack1.empty()){
int topvalue = stack1.top();
stack2.push(topvalue);
stack1.pop();
}
int value = stack2.top();
stack2.pop();
return value;
}else{
return -1;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};