剑指offer_【5】两个栈实现队列

本文介绍了一种使用两个栈来实现队列的方法,详细解释了如何通过调整数据的入栈和出栈顺序来达到队列的先进先出特性。通过在特定条件下交换栈内数据,实现了队列的Push和Pop操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 题目描述

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

2. 解题思路
  • 栈的规则是先进后出,队列的规则是先进先出
  1. stack1一直维持着栈底–栈顶是队列的入队顺序
  2. stack2一直维持着栈顶–栈尾为队列的入队顺序
  3. 当执行队列的入队(push)时,如果stack2为空,则直接插入到stack1,stack1从栈底到栈顶的顺序为入队顺序,如果stack2不为空,则将stack2的元素倒入(栈顶—栈尾)stack1,然后再插入数据
  4. 当执行队列的出队(pop)操作时,应该出的是stack1的栈底元素,故将stack1依次倒入stack2,这时stack2的栈顶就是要出队的数值,此时stack1为空,stack2从(栈顶–栈尾)为入队顺序
3. 代码
public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    //队列的入队
    public void push(int node) {
        //将stack2倒入stack1
        while (!stack2.empty()) {
            stack1.push(stack2.pop());
        }
        //将元素插入stack1
        stack1.push(node);
    }
    //队列的出队

    public int pop() {
        //将stack1倒入stack2
        while (!stack1.empty()) {
            stack2.push(stack1.pop());
        }
        //stack2的栈顶就是出队数值
        return stack2.pop();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值