用两个栈来实现一个队列

用两个栈来实现一个队列
一、题目来源:链接

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型

二、题目分析
* 用两个栈来实现队列的push()和pop()操作

注意这里的队列的特性:先进先出,并且,其中的push()操作为添加元素到队列末尾,pop()操作为弹出队首元素,并且将其删除

  • 其中栈的特性为:先进后出

  • 算法思想:这里利用了两个栈,来实现队列的操作,由队列和栈的特性可以知道,可以利用一个栈来作为过渡使用,即:

  • 当向队列中插入数据时,实际上将其插入栈stack1中

    当要从队列中弹出队首元素时,就可以将stack1中的元素依次写入到stack2中(由于在stack1中元素的顺序与队列中的正好相反,所以再次反即为正,反反得正)

  • 所以这个时候,从栈stack2中弹出的栈顶元素即为队列中的队首元素

    Stack stack1 = new Stack();
    Stack stack2 = new Stack();

    public void push(int node) {
    stack1.push(node);
    }

    public int pop() {

    //注意这里不必每次都将stack2清空,因为再后面的逆转回去时,会将栈中的元素pop()掉,这个操作就相当于清空了stack2,stack1也是一样的
    //注意这里是将stack1中的元素逆转(反反得正)
    while(!stack1.isEmpty()){
    stack2.push(stack1.pop());
    }
    //这里将要返回的队首的值取到了
    int getNumber = stack2.pop();
    //在取到对应的队首元素之后,就需要将剩下的元素在返回到原本的栈stack1中去
    while(!stack2.isEmpty()){
    stack1.push(stack2.pop());
    }
    return getNumber;
    1
    }
    三、代码

import java.util.Stack;

public class Solution {
  Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

   public void push(int node) {
        stack1.push(node);
    }


   public int pop() {

       while(!stack2.isEmpty())
        {
            return stack2.pop();
        }

        while(!stack1.isEmpty())
        {
            stack2.push(stack1.pop());
        }

        return stack2.pop();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值