菜鸟刷题路:剑指 Offer 09. 用两个栈实现队列

剑指 Offer 09. 用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

class CQueue {
    Stack<Integer> stackA, stackB;
    public CQueue() {
        stackA = new Stack<Integer>();
        stackB = new Stack<Integer>();
    }
    
    public void appendTail(int value) {
        stackA.push(value);
    }
    
    public int deleteHead() {
        if(!stackB.isEmpty())
            return stackB.pop();
        if(stackA.isEmpty())
            return -1;
        while(!stackA.isEmpty())
            stackB.push(stackA.pop());
        return stackB.pop();
    }
}

思路:关键在于 deleteHead()

  • 先创建两个stack对象,一个用来存(A),一个用来取(B)
  • 存没什么技术含量
  • 如果B内有值直接弹出即可,如果没有就判断下A有没有值,A内无值就返回-1,有值的话就依次弹出并置入到栈B内
  • 最后栈B弹出第一个值即可
posted @ 2019-11-21 22:08  无名客nameless  阅读(61)  评论(0)    收藏  举报