题解 | #两个队列实现栈#
两个队列实现栈
https://www.nowcoder.com/practice/9fc5ae0e203f4d079b68dee34818832a
先进先出,变先进后出。两个队列,
- push时,push到q1
- pop时,先将q1的元素转移到q2中,最终q1只剩一个元素,长度为1,此时即为最后push进来的,后进先出
- pop完成后,需要交换q1和q2,方便下次pop
- push操作始终在q1
public class MyStack { // 进行push操作 Queue<Integer> q1 = new LinkedList<>(); // 进行pop操作时,存储之前的值 Queue<Integer> q2 = new LinkedList<>(); public void push(int node) { q1.add(node); } public int pop() { while (q1.size() > 1) { q2.add(q1.poll()); } // 交换q1和q2 Queue<Integer> tmp = q1; q1 = q2; q2 = tmp; return q2.poll(); } public int top(){ while (q1.size() > 1) { q2.add(q1.poll()); } int res = q1.peek(); // 最后一个也放进去q2,然后交换q1和q2 q2.add(q1.poll()); // 交换q1和q2 Queue<Integer> tmp = q1; q1 = q2; q2 = tmp; return res; } public boolean empty() { return q1.isEmpty() && q2.isEmpty(); } }