JZ9-题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
题目描述
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素.
题解:栈1用来存放元素,栈2用来出栈。
算法思路:
- 栈1只用于存放入队列的元素,其顺序同队列相反
- 栈2为空时候,将栈1所有元素都出栈存放入栈2中,此时,栈2顺序同队列相同。
- 出栈时候,先判断栈2是否为空,若不为空,则将余下的元素出栈,顺序同队列。注意:此时不能将栈1元素入栈2中,会破坏顺序;若为空,将栈1所有元素入栈2中,然后再进行出栈队列元素。
代码:
class Solution
{
public:
void push(int node) {
// stack1.push(node);
stack1.push(node);//入栈
}
int pop() {
//当stack2为空的时候,把所有stack1中元素入栈,其顺序恰好同队列
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.top());//栈1元素入栈2中
stack1.pop();//栈1元素出栈
}
}
//如果不为空,就不在往栈2中存放元素,只有在栈2元素出栈完毕之和,在存放
//不为空时,栈2元素出栈顺序是同队列一样的
int result = stack2.top();
stack2.pop();
return result;
}
private:
stack<int> stack1;
stack<int> stack2;
};