还有种方法,就是利用同一个队列,知道队列长度前提下,把内容从头到尾,再向尾部依次重推一下。
package com.company;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
Queue[] queues;
int cur;
Solution() {
queues = new LinkedList[2];
queues[0] = new LinkedList<Integer>();
queues[1] = new LinkedList<Integer>();
cur = 0;
}
// Push element x onto stack.
public void push(int x) {
queues[cur].offer(x);
}
// Removes the element on top of the stack.
public void pop() {
change(true);
}
// Get the top element.
public int top() {
return change(false);
}
private int change(boolean pop) {
int next = (cur + 1) % 2;
int num = (int)queues[cur].poll();
while (!queues[cur].isEmpty()) {
queues[next].offer(num);
num = (int)queues[cur].poll();
}
if (!pop) {
queues[next].offer(num);
}
cur = next;
return num;
}
// Return whether the stack is empty.
public boolean empty() {
return queues[cur].isEmpty();
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
System.out.println("Hello!");
Solution solution = new Solution();
// Your Codec object will be instantiated and called as such:
solution.push(1);
solution.push(2);
solution.push(3);
int ret = solution.top();
System.out.printf("ret:%d\n", ret);
solution.pop();
ret = solution.top();
System.out.printf("ret:%d\n", ret);
solution.pop();
ret = solution.top();
System.out.printf("ret:%d\n", ret);
System.out.println();
}
}