(两百二十)leetcode 用两个栈实现队列

1.题目

 

2.思路

题目中要求使用两个栈实现一个加头,一个去尾,stack去尾特别容易,直接pop就好了,加头比较难,因为stack是先进后出的数据结构。除非是将已经入栈的全部出栈,然后将第一个加进去,然后再将出栈的按原来顺序入栈才行

 

3.coding

class CQueue {
    Stack<Integer> aStack;
    Stack<Integer> bStack;
    public CQueue() {
        aStack = new Stack();
        bStack = new Stack();
    }

    public void appendTail(int value) {
        while (!aStack.isEmpty()) {
            bStack.push(aStack.pop());
        }
        aStack.push(value);
        while (!bStack.isEmpty()) {
            aStack.push(bStack.pop());
        }
    }

    public int deleteHead() {
        if (!aStack.isEmpty()) {
            return aStack.pop();
        }
        return -1;
    }
}

 

 

 

4.参考思路

class CQueue2 {
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;

    public CQueue2() {
        this.stack1 = new Stack();
        this.stack2 = new Stack();
    }

    public void appendTail(int value) {
        stack1.push(value);
    }

    public int deleteHead() {

        if(stack2.size()<=0){
            if(stack1.size()<=0) return -1;
            for(int i = stack1.size();i>0;i--){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}

一个负责入,一个负责出,stack2可以认为是头,stack可以认为是尾,这样感觉效率更高点,最快连续两次删除头部,第二次直接删就好了。

 

相关推荐
©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页