随想录训练营Day10| 232.用栈实现队列, 225. 用队列实现栈

71 阅读1分钟

随想录训练营Day10| 232.用栈实现队列, 225. 用队列实现栈

标签: LeetCode闯关记


##**1. ** ###1.1 题目 相关链接 232.用栈实现队列

###1.2 解题思路 用两个栈来实现, stackIn and stackOut; 实现方法中,最重要的是: pop() 和 peek()的共同操作,即把stackIn中的元素转移到stackOut中; ###1.3 遇到问题

###1.4 算法实现

class MyQueue {

    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        stackIn = new Stack<>(); //负责进栈;
        stackOut = new Stack<>();//负责出栈;
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        dumpstackIn();
        return stackOut.pop();
    }
    
    public int peek() {
        dumpstackIn();
        return stackOut.peek();
    }
    
    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();

    }

    private void dumpstackIn(){
        if(!stackOut.isEmpty())return;
        while(!stackIn.isEmpty()){
            stackOut.push(stackIn.pop());
        }
    }
}

###1.5 题目总结 解题耗时:40min ###1.6 疑惑 Stack, Deque, LinkedList, ArrayDeque的关系?


##2. 225. 用队列实现栈 ###2.1 题目 225. 用队列实现栈 ###2.2 解题思路 用一个队列(Deque)来实现,关键是pop()方法的实现, 确定为了弹出栈的第一个元素,需要在队列中pop并push的(size - 1)个元素; ###2.3 遇到问题

###2.4 实现代码

class MyStack {

    // Deque 接口继承了 Queue 接口
    // 所以 Queue 中的 add、poll、peek等效于 Deque 中的 addLast、pollFirst、peekFirst
    Deque<Integer> que1;

    public MyStack() {
        que1 = new ArrayDeque<>();
    }
    
    public void push(int x) {
        que1.addLast(x);
    }
    
    public int pop() {
        int size = que1.size();
        while(size > 1) {// 将 (size - 1)个元素 导入 到 目标元素之后
            que1.addLast(que1.peekFirst()); //先导入
            que1.pollFirst();//后弹出
            size--;
        }
        int res = que1.pollFirst();
        return res;
    }
    
    public int top() {
        return que1.peekLast();
    }
    
    public boolean empty() {
        return que1.isEmpty();
    }
}

###2.5 题目总结 解题耗时: 40min ###2.6 相关题目


###3. 总结 对队列和栈的实现对象和各种方法都不懂. 3.27 补 3.24