剑指 Offer 09. 用两个栈实现队列
题目:
思路:
【1】利用栈的特性来实现队列的特性,首先栈是后进先出的,所以插入的时候先放到A栈,而取出的时候是从B栈取出。那么B栈是如何填充的,当B栈为空的时候,又遇到取出,必先判断A栈是否为空,如果不为空,将A栈的数据导入到B栈。这样B栈的最上面数据其实就已经是满足先进先出的队列特性了。而且当B栈还没空的时候是不允许A栈再次将数据导入进来,避免顺序错乱。
代码展示:
//时间35 ms击败93.78% //内存48.6 MB击败40.72% class CQueue { Deque<Integer> inStack; Deque<Integer> outStack; public CQueue() { inStack = new ArrayDeque<Integer>(); outStack = new ArrayDeque<Integer>(); } public void appendTail(int value) { inStack.push(value); } public int deleteHead() { if (outStack.isEmpty()) { if (inStack.isEmpty()) { return -1; } in2out(); } return outStack.pop(); } private void in2out() { while (!inStack.isEmpty()) { outStack.push(inStack.pop()); } } } /** * Your CQueue object will be instantiated and called as such: * CQueue obj = new CQueue(); * obj.appendTail(value); * int param_2 = obj.deleteHead(); */