LeetCode225.用队列实现栈

题目描述#

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

示例#

image

提交的代码#

方法一:#

import java.util.Deque;
import java.util.LinkedList;

class MyStack {
    Deque<Integer> inQueue;
    Deque<Integer> outQueue;

    public MyStack() {
        inQueue=new LinkedList<>();
        outQueue=new LinkedList<>();
    }
    
    public void push(int x) {
        inQueue.offerLast(x);
    }
    
    public int pop() {
        dumpQueue();
        return outQueue.pollFirst();
    }
    
    public int top() {
        dumpQueue();
        return outQueue.peekFirst();
    }
    
    public boolean empty() {
        return inQueue.isEmpty()&&outQueue.isEmpty();
    }

    public void dumpQueue(){
        if(inQueue.isEmpty())return;
        while(!inQueue.isEmpty()){
            outQueue.offerFirst(inQueue.pollFirst());
        }
    }
}

实现的思想和上一篇实现栈的思想类似。只不过dumpQueue方法和dumpStack方法中判断空的逻辑变了一些。

方法二#

import java.util.Queue;
import java.util.LinkedList;

class MyStack {
    Queue<Integer> mainQueue;
    Queue<Integer> auxQueue;

    public MyStack() {
        mainQueue=new LinkedList<>();
        auxQueue=new LinkedList<>();
    }
    
    public void push(int x) {
        while(!mainQueue.isEmpty()){
            auxQueue.offer(mainQueue.poll());
        }
        mainQueue.offer(x);
        while(!auxQueue.isEmpty()){
            mainQueue.offer(auxQueue.poll());
        }
    }
    
    public int pop() {
        return mainQueue.poll();
    }
    
    public int top() {
        return mainQueue.peek();
    }
    
    public boolean empty() {
        return mainQueue.isEmpty();
    }

}

实现的思想就是主队列来模拟栈(倒着的),当offer元素时,先将主队列的元素出队依次添加到辅助队列的末尾,保持次序不变,然后将新添加的元素添加到主队列的尾部(此时队列为空,也是头部),然后再将辅助队列依次出队并加入主队列的后面。

学习到的东西#

本来还想找一下jdk官方对于Queue实现的,但是发现有个Deque(Double end queue)这个类既可以做栈又可以做队列,和Queue的操作类似,不过加了个first和last而已(offerFirst,offerLast,pollFirst,pollLast,peekFirst,peekLast)。

作者:whitePuPigeon

出处:https://www.cnblogs.com/whitePuPigeon/p/17798963.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   白布鸽  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示