【LeetCode】升级打怪之路 Day 10:栈与队列的互相实现

今日题目:

目录

      • [LC 232. 用栈实现队列 【easy】](#LC 232. 用栈实现队列 【easy】)
      • [LC 225. 用队列实现栈 【思路没想到】 ⭐⭐⭐](#LC 225. 用队列实现栈 【思路没想到】 ⭐⭐⭐)

今天做了"用 stack 实现 queue"和"用 queue 实现 stack"的两道题目,虽然难度不大,但是用 queu 实现 stack 的思路没有想到,而且有点别扭,这个要格外记一下

LC 232. 用栈实现队列 【easy】

232. 用栈实现队列 | LeetCode

这个题目很容易了,使用两个 stack 来实现 queue。

在 Java 中,可以使用 ArrayList 或者 Dequeue 来当作 stack。

LC 225. 用队列实现栈 【思路没想到】 ⭐⭐⭐

225. 用队列实现栈 | LeetCode

用 queue 来实现 stack 有一点别扭了。

实现思路可以参考官方题解。使用了两个 queue:

  • queue1:所引用的 queue 维护了栈弹出的顺序,即越新的元素越在前面。所以在实现 pop() 操作时,只需要让 queue1 的队首出队即可。
  • queue2:平时为空队列,当需要添加新元素时,把新元素放入这个空队列,然后让 queue1 的所有元素依次出队并放入 queue2 这个队列,这样就实现了最新的元素在队首的顺序。完成后,queue1 变空队列了,然后交换 queue1 与 queue2 的变量引用即可。
java 复制代码
class MyStack {

    private LinkedList<Integer> queue1;  // 数据 poll 的顺序就是 stack 的顺序

    private LinkedList<Integer> queue2;  // 一直保持为空

    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }
    
    public void push(int x) {
        queue2.offer(x);
        while (!queue1.isEmpty()) {
            queue2.offer(queue1.poll());
        }
        // swap queue1 and queue2
        var temp = queue1;
        queue1 = queue2;
        queue2 = temp;
    }
    
    public int pop() {
        return queue1.poll();
    }
    
    public int top() {
        return queue1.peek();
    }
    
    public boolean empty() {
        return queue1.isEmpty();
    }
}
相关推荐
_清歌1 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法
统计实现局1 天前
SVD 的三步走:双对角化、Givens 收敛、排序
算法
躬行见万象1 天前
《VLA 系列》UniLab 强化训练 | G1 机器人 |复现
算法
统计实现局1 天前
对称不定分解(Bunch-Kaufman):为什么 Cholesky 不够用
算法
统计实现局1 天前
dqrsl 拆解:拿着 QR 结果能算出哪 5 种东西
算法
统计实现局1 天前
为什么 Cholesky 求逆比 Gauss-Jordan 快一倍——行列式溢出防护详
算法
To_OC2 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵2 天前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC2 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode