【剑指offer】8.用两个栈实现队列

8.用两个栈实现队列

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

示例 1:

输入:

[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]

[[],[3],[],[]]

输出:[null,null,3,-1]

th:用两个栈,一个栈push数据 另一个栈pop数据

输入数据 1 2 3 push进inStack 为 3 2 1 在pop到outStack栈中 为1 2 3 和输入数据顺序一样、

复杂度分析

插入元素

时间复杂度:O(1) 一次push操作
空间复杂度:O(1) 一个存储空间

删除元素

时间复杂度:O(n) 数据从inStack到OutStack栈 loop一次。
空间复杂度:O(n)

   /*
        * 用两个栈,一个栈push数据 另一个栈pop数据
        输入数据 1 2 3 push进inStack 为  3 2 1 在pop到outStack栈中 为1 2 3 和输入数据顺序一样、
        */
        Stack<Integer> in;
        Stack<Integer> out;
        public CQueue() {
            in = new Stack();
            out = new Stack();
        }
        
        public void appendTail(int value) {
            in.push(value);
        }
        
        public int deleteHead() {
            if(out.empty()){
                while(!in.empty()){
                    out.push(in.pop());;
                }
            }
    
            if(out.empty()){
                return -1;
            }
    
            return out.pop();
        }
原文地址:https://www.cnblogs.com/qxlxi/p/12860678.html