Leetcode 232. 用栈实现队列 225. 用队列实现栈

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


232. 用栈实现队列


● 今日学习的Leetcode链接

用栈实现队列

● 自己看到题目的第一想法

因为出队列时,队列里肯定有元素,所以更简单了
两个栈,进去进一个栈,出的时候要保证出的栈是空的,然后将进栈内的元素全部倒入新栈。

● 看完代码随想录之后的想法

● 自己实现过程中遇到哪些困难

  1. Stack stackIn = new Stack<>(); 栈是这样定义的
  2. 栈是java.util中的类,但官方更推荐用队列实现栈

● 今日收获,记录一下自己的学习时长

easy

class MyQueue {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public MyQueue() {
        stackIn = new Stack<Integer>();
        stackOut = new Stack<Integer>();
    }
    
    public void push(int x) {
        stackIn.push(x);
    }
    
    public int pop() {
        if(!stackOut.empty()){
            return stackOut.pop();
        }
        while(!stackIn.empty()){
            stackOut.push(stackIn.pop());
        }
        return stackOut.pop();
    }
    
    public int peek() {
        if(!stackOut.empty()){
            return stackOut.peek();
        }
        while(!stackIn.empty()){
            stackOut.push(stackIn.pop());
        }
        return stackOut.peek();

    }
    
    public boolean empty() {
        if(stackIn.empty() && stackOut.empty()){
            return true;
        }
        return false;
    }
}

225. 用队列实现栈


● 今日学习的Leetcode链接

用队列实现栈

● 自己看到题目的第一想法

用两个队列可以实现,形成一个环
但是一个队列也可以成为一个环

● 看完代码随想录之后的想法

Dequeue也可实现 (双端队列)

● 自己实现过程中遇到哪些困难

  1. LinkedList<>实现了Queue<>接口,Queue<>接口继承了Collection接口
  2. Queue queue = new LinkedList<>();

● 今日收获,记录一下自己的学习时长

class MyStack {
    Queue<Integer> queue;
    public MyStack() {
        queue = new LinkedList<>();
    }
    
    public void push(int x) {
        queue.offer(x);
        int num = queue.size()-1;
        while(num>0){
            queue.offer(queue.poll());
            num--;
        }
    }
    
    public int pop() { 
        return queue.poll();
    }
    
    public int top() {
        return queue.peek();
    }
    
    public boolean empty() {
        return queue.isEmpty();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值