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
原文地址:https://www.cnblogs.com/hzqshuai/p/12304924.html
时间: 2024-10-06 20:47:06