面试题09. 用两个栈实现队列
Posted hzqshuai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题09. 用两个栈实现队列相关的知识,希望对你有一定的参考价值。
class CQueue { private Stack<Integer> stack1; private Stack<Integer> stack2; public CQueue() { this.stack1 = new Stack<>(); this.stack2 = new Stack<>(); } public void appendTail(int value) { //压入栈1 stack1.push(value); } public int deleteHead() { if(stack2.isEmpty()){ if(stack1.isEmpty()){ //只有当栈1和栈2都为空时,才代表没有数据了,返回-1 return -1; }else{ while(!stack1.isEmpty()){ //stack2为空,但是stack1不为空,则代表队列还有缓存数据未入队 //将这些缓存数据压入栈2中 stack2.push(stack1.pop()); } } } return stack2.pop(); } }
举例:
添加四个元素{1,2,3,4}
出队1次
此时stack1为空 stack2.size == 3({2,3,4})
添加元素5
此时stack1.size == 1({5}) stack2.size == 3({2,3,4})
连续执行三次出队操作
此时stack1.size == 1({5}) stack2.size == 0,即stack2为空
但是此时stack1不为空,代表着仍然有缓存元素未入队
将stack1的元素全部弹栈并压入stack2
此时stack1.size == 0即stack1为空 stack2.size == 1({5})
执行一次出队操作
此时stack1.size == 0即stack1为空 stack2.size == 0即stack2为空
如果再执行出队操作,则返回-1
以上是关于面试题09. 用两个栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章