import java.util.*;
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()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}

已知栈的特点是先进后出,队列的特点是先进先出,所以解题的关键是把栈底元素维护在栈顶使得弹出时能够弹出正确的元素.代码实现中,s2以模拟队列的方式存储了前k个元素,在s2中pop可以保证每次弹出正确的元素.将s1中元素倒进s2的时机选择在s2为空时避免了后进元素堆在先进元素上使队列逻辑出现错误