LeetCode第225题—用队列实践栈

本次写的题目是用队列实践栈,为LeetCode里面的题目,让我们来康康是如何解出这道题目的吧,各位尚没有思路的小伙伴可以跟随着博主的解题思路一步步来,感受一下😎

🌱分析阶段

题意一目了然,就是用队列来实现栈的功能。

我们都知道队列的特点是先进先出,而栈的特点却是先进后出,完全相反的两个特点。所以要想单凭一个队列是无法实现模仿的,在这里我们先用两个队列来尝试一下。这个过程自己画图做思考。

在简单尝试后,发现该方法可行,我们只需要设置两个队列,分别命名为qu1和qu2。当两个队列都为空且要入栈的时候,先放入qu1队列里。而要出栈时,拥有元素的队列弹出队列长度-1个元素到另一个空队列中,而剩下的最后一个元素则就为要弹出的栈顶元素。图示如下👇:

问题思路较为清晰,到此时已经分析的较为清楚了,接下来让我们直接进入代码阶段吧😎


🌱代码阶段 

我们按照一个一个函数来进行代码编写。首先是要创建两个队列,分别命名为qu1和qu2,如下代码👇:

import java.util.*; //注意这里要调用包

class MyStack {

    public Queue<> qu1 = new LinkedList<>();
    public Queue<> qu2 = new LinkedList<>();

    public MyStack() {

    }
    
    public void push(int x) {

    }
    
    public int pop() {

    }
    
    public int top() {

    }
    
    public boolean empty() {

    }
}

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

🍃push函数

按照前面分析阶段中来写代码:如果一开始两个队列都没有元素,就放入qu1;如果其中一个有元素,那么就放入有元素的里面。具体代码如下👇:

import java.util.*; //注意这里要调用包

class MyStack {

    public Queue<> qu1 = new LinkedList<>();
    public Queue<> qu2 = new LinkedList<>();

    public MyStack() {

    }
    
    public void push(int x) {
        if(qu1.size()==0&&qu2.size()==0){
            qu1.offer(x);
        }else if(qu2.size()!=0){
            qu2.offer(x);
        }else{
            qu1.offer(x);
        }
    }
    //其他未写代码暂时省略
}

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

🍃pop函数

依据分析:将有元素的队列弹出(队列长度-1)个元素到另一空队列中,最后剩下的那个元素就是我们要弹出的元素。具体代码如下👇:

import java.util.*; //注意这里要调用包

class MyStack {

    public Queue<> qu1 = new LinkedList<>();
    public Queue<> qu2 = new LinkedList<>();

    public MyStack() {

    }
    
    public void push(int x) {
        if(qu1.size()==0&&qu2.size()==0){
            qu1.offer(x);
        }else if(qu2.size()!=0){
            qu2.offer(x);
        }else{
            qu1.offer(x);
        }
    }

    public int pop() {
        //题目提出无栈为空的情况,所以不讨论栈为空的情况
        int size = 0;
        if(qu1.size()!=0){
            size = qu1.size();
            for(int i = 0; i<size-1; i++){
                qu2.offer(qu1.poll());
            }
            return qu1.poll();
        }else{
            size = qu2.size();
            for(int i = 0; i<size-1; i++){
                qu1.offer(qu2.poll());
            }
            return qu2.poll();
        }
    }

    //其他未写代码暂时省略
}

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

🍃top函数

和pop函数差不多,只需要改成先记录下最后剩余元素,然后把最后一个元素转到另一个队列中,返回该最后元素的值即可😎具体代码如下👇:

import java.util.*; //注意这里要调用包

class MyStack {

    public Queue<> qu1 = new LinkedList<>();
    public Queue<> qu2 = new LinkedList<>();

    public MyStack() {

    }
    
    public void push(int x) {
        if(qu1.size()==0&&qu2.size()==0){
            qu1.offer(x);
        }else if(qu2.size()!=0){
            qu2.offer(x);
        }else{
            qu1.offer(x);
        }
    }

    public int pop() {
        //题目提出无栈为空的情况,所以不讨论栈为空的情况
        int size = 0;
        if(qu1.size()!=0){
            size = qu1.size();
            for(int i = 0; i<size-1; i++){
                qu2.offer(qu1.poll());
            }
            return qu1.poll();
        }else{
            size = qu2.size();
            for(int i = 0; i<size-1; i++){
                qu1.offer(qu2.poll());
            }
            return qu2.poll();
        }
    }

    public int top() {
        int size = 0;
        if(qu1.size()!=0){
            size = qu1.size();
            for(int i = 0; i<size-1; i++){
                qu2.offer(qu1.poll());
            }
            int f =  qu1.poll();
            qu2.offer(f);
            return f;
        }else{
            size = qu2.size();
            for(int i = 0; i<size-1; i++){
                qu1.offer(qu2.poll());
            }
            int f =  qu2.poll();
            qu1.offer(f);
            return f;
        }
    }

    public boolean empty() {
        if(qu1.size()==0&&qu2.size()==0) return true;
        return false;
    }
}

由于empty函数的思路很清晰,所以博主在上面代码一并写入了。

以上,就是全部代码了😎运行下逝逝吧~

nice😎✨ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值