利用两个队列来实现一个栈的功能
样例
例1:
输入:
push(1)
pop()
push(2)
isEmpty() // return false
top() // return 2
pop()
isEmpty() // return true
例2:
输入:
isEmpty()
解题思路:
q1是专职进出栈的,q2只是个中转站
- 入栈:直接入队列q1即可
- 出栈:把q1的除最后一个元素外全部转移到队q2中,然后把刚才剩下q1中的那个元素出队列。之后把q2中的全部元素转移回q1中
-
public class Stack { private LinkedList<Integer> queue1 = new LinkedList<>(); private LinkedList<Integer> queue2 = new LinkedList<>(); /* * @param x: An integer * @return: nothing */ public void push(int x) { // write your code here queue1.offer(x); } /* * @return: nothing */ public void pop() { // write your code here if(queue1.size() == 1){ queue1.poll(); return; } int len = queue1.size() - 1; while(len-- != 0){ queue2.offer(queue1.poll()); } queue1.poll(); while(!queue2.isEmpty()){ queue1.offer(queue2.poll()); } } /* * @return: An integer */ public int top() { // write your code here if(queue1.size() == 1) return queue1.peek(); int len = queue1.size() - 1; while(len-- != 0){ queue2.offer(queue1.poll()); } int res = queue1.peek(); queue2.offer(queue1.poll()); while(!queue2.isEmpty()){ queue1.offer(queue2.poll()); } return res; } /* * @return: True if the stack is empty */ public boolean isEmpty() { // write your code here return queue1.isEmpty(); } }