• 剑指Offer:面试题09. 用两个栈实现队列


    1.要点

    使用java的同学请注意,如果你使用Stack的方式来做这道题,会造成速度较慢; 原因的话是Stack继承了Vector接口,而Vector底层是一个Object[]数组,那么就要考虑空间扩容和移位的问题了。 可以使用LinkedList来做Stack的容器,因为LinkedList实现了Deque接口,所以Stack能做的事LinkedList都能做,其本身结构是个双向链表,扩容消耗少。
    LinkedList介绍(注意方法)

    2.题目

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

    3.示例

    • 示例 1:
    输入:
    ["CQueue","appendTail","deleteHead","deleteHead"]
    [[],[3],[],[]]
    输出:[null,null,3,-1]
    
    • 示例 2:
    输入:
    ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
    [[],[],[5],[2],[],[]]
    输出:[null,-1,null,null,5,2]
    

    4.提示:

    1 <= values <= 10000 最多会对 appendTail、deleteHead 进行 10000 次调用

    5.代码

    • 1.大佬的 > 巧妙之处:在抛出时,并没有每次都去构造stack2,而是只有stack2为空是才构造
    class CQueue {
        LinkedList<Integer> stack1;
        LinkedList<Integer> stack2;
    
        public CQueue() {
            stack1 = new LinkedList<>();
            stack2 = new LinkedList<>();
        }
    
        public void appendTail(int value) {
            stack1.add(value);
        }
    
        public int deleteHead() {
            if (stack2.isEmpty()) {
                if (stack1.isEmpty()) return -1;
                while (!stack1.isEmpty()) {
                    stack2.add(stack1.pop());
                }
                return stack2.pop();
            } else return stack2.pop();
        }
    }
    
    • 2.自己的
    public class CQueue{
            LinkedList<Integer> stack1;
            LinkedList<Integer> stack2;
            public CQueue() {
                stack1 = new LinkedList<Integer> ();
                stack2 = new LinkedList<Integer> ();
            }
    
            public void appendTail(int value) {
                stack1.push(value);
            }
    
            public int deleteHead() {
                if(stack1.isEmpty()){
                    return -1;
                }
                while (!stack1.isEmpty()){
                    stack2.push(stack1.pop());
                }
                int result = stack2.pop();
                while(!stack2.isEmpty()){
                    stack1.push(stack2.pop());
                }
                return result;
            }
        }
    


    查看原文:http://yuyy.info/%e7%ae%97%e6%b3%95%e8%ae%ad%e7%bb%83/%e5%89%91%e6%8c%87offer%e9%9d%a2%e8%af%95%e9%a2%9809-%e7%94%a8%e4%b8%a4%e4%b8%aa%e6%a0%88%e5%ae%9e%e7%8e%b0%e9%98%9f%e5%88%97/
  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/yuyy114/p/13194347.html
Copyright © 2020-2023  润新知