用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
示例 1:
输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
示例 2:
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
题解(一栈进一栈出,基础题)
class CQueue {
Stack<Integer> instack; //进栈
Stack<Integer> outstack; //出栈
public CQueue() {
instack=new Stack<Integer>(); //初始化
outstack=new Stack<Integer>();
}
public void appendTail(int value) {
instack.push(value); 栈1直接进
}
public int deleteHead() {
if(outstack.isEmpty()&&instack.isEmpty()){ //空直接返回-1
return -1;
} else if(outstack.isEmpty()){ //将栈1元素放入栈2,实现倒叙输出
while( ! instack.isEmpty()){
outstack.push(instack.pop()); //栈2不空,直接就是倒叙
}
}else{
}
return outstack.pop(); // 出队列
}
}