题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的
功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:[null,null,3,-1]
解题思路
关于实现队列的插入和删除可以借助两个队列来实现:
首先stack1:负责实现队列元素的插入,将所要插入的元素,按顺序依次压入stack1中。
其次stack2:用来实现队列的元素删除操作,借助栈的先进后出思想,先压入stack1,再弹出压入stack2,再从stack2弹出,即可实现队列的先进先出思想!同样在完成队列的删除操作前,每次需要检查stack2元素是否为空,如果stack2不为空,直接弹出即可。否则,则需要将stack1中所有元素其依次弹出并压入stack2中,然后再进行stack2的弹出操作即可!如果stack1与stack2均为空,那么返回-1。
图示
代码实现
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
import java.util.Stack;
class CQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;
public CQueue() {
stack1=new Stack<>();
stack2=new Stack<>();
}
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 {
return stack2.pop();
}
}
public static void main(String[] args) {
CQueue queue = new CQueue();
queue.push(1);
queue.push(2);
queue.push(3);
System.out.println(queue.pop()+","+queue.pop());
}
}
总结
本题来源于面试经典教材《剑指offer》中 归属于栈&队列类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!
最后,感谢AIAS!