题目:
实现一个MyQueue类,该类用两个栈来实现一个队列。
解题思路:
实例化两个栈s1(入队),s2(出队);入队操作时元素压入s1中,出队操作时判断s2是否为空,若为空那么依次将s1中的元素压入s2中,若不为空,s2出栈即可。
代码:
static class MyQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;
/** Initialize your data structure here. */
public MyQueue() {
stack1 = new Stack<>();
stack2 = new Stack<>();
}
/** 入队 */
public void push(int x) {
stack1.push(x);
return;
}
/** 出队 */
public int pop() {
transfer(); //导栈
return stack2.pop();
}
/** 如果stack2空了 那么将stack1中的元素全部导入stack2中*/
public void transfer(){
if(stack2.empty()){
while(!stack1.empty()) {
stack2.push(stack1.pop());
}
}
return;
}
/** 获取队首元素 */
public int peek() {
transfer(); //导栈
return stack2.peek();
}
/** 判空 */
public boolean empty() {
return stack1.empty() && stack2.empty();
}
}