思路:使用两个栈,一个栈(栈1)用于保存输入,另一个栈(栈2)用于将输入倒序保存。当要想向队列中插入一个元素时,直接将元素插入到栈1中;当想从队列中获取一个元素时,首先判断整个队列是否为空,若不为空,判断栈2是否为空,若不为空,返回栈顶元素即为队列的第一个元素;若栈2为空,则将栈1中的元素全部压入栈2,再将栈2的栈顶元素弹出即可。
Java代码如下:
import java.util.Stack;
class MyQueue{
private Stack<Integer> inputStack;
private Stack<Integer> outputStack;
MyQueue(){
inputStack = new Stack<Integer>();
outputStack = new Stack<Integer>();
}
// 入队列
public void add(int num){
inputStack.push(num);
}
// 出队列
public int remove(){
if(inputStack.isEmpty() && outputStack.isEmpty()){
return -1;
}
if(!outputStack.isEmpty()){
return outputStack.pop();
} else{
// 将inputStack栈中的全部元素依次出栈,放入outputStack中
while(!inputStack.isEmpty()){
outputStack.push(inputStack.pop());
}
return outputStack.pop();
}
}
// 判断队列是否为空
public boolean isEmpty(){
if(inputStack.isEmpty() && outputStack.isEmpty()){
return true;
} else{
return false;
}
}
}
public class Solution {
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.add(2);
queue.add(324);
queue.add(14);
System.out.println(queue.isEmpty());
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.isEmpty());
}
}