1.题目地址
2.题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
提示:1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用
3.思路
定义两个栈stack1作为输入栈,stack2作为输出栈。当一个数据进入方法时,向栈stack1中插入。需要取出数据时,首先判断stack2中是否为空,若为空则将stack1中所有元素按照后进先出依次弹出并装入到栈stack2中。此时从stack2中弹出的数据便符合队列的先进先出顺序。
力扣图示
4.代码
public class Offer09 {
//输入栈
LinkedList<Integer> stack1;
//输出栈
LinkedList<Integer> stack2;
public Offer09() {
stack1 = new LinkedList<>();
stack2 = new LinkedList<>();
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
}
if (stack2.isEmpty()) {
return -1;
} else {
int deleteItem = stack2.pop();
return deleteItem;
}
}
}