1.题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
2.算法描述
1.用栈1用来做存储栈,用栈2用来做反序栈。
2.队列入队时,就入栈1;当队列出队时,需要出队的元素在栈1的栈底,我们借助栈2,将栈1依次出栈到栈2直到栈1为空,此时栈1的栈底成为栈2的栈顶,栈2出栈一个元素,完成一次出队。
3.当下次出队时,如果栈2还有元素,则直接出栈;如果没有元素则判断栈1是否还有元素,如果栈1没有元素则说明没有元素;如果栈1还有元素,则按照2的步骤进行。
3.代码描述
3.1.Java代码
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(!stack2.isEmpty())
return stack2.pop();
else if(stack1.isEmpty())
throw new RuntimeException("Queue is empty!");
else{
while(!stack1.isEmpty())
stack2.push(stack1.pop());
return stack2.pop();
}
}
}
3.2.Python代码
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
# write code here
self.stack1.append(node)
def pop(self):
# return xx
if self.stack2:
return self.stack2.pop()
elif not self.stack1:
return None
else:
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()