剑指offer:用两个栈实现队列

如何用两个栈实现队列

首先要清楚栈是先进后出,队列是先进先出的。这里用到是类似于数学的 “负负得正” 的思想。先用stack1将数据存进去,再依次取出stack1 pop出来的数据append进入stack2里,最后再把stack2里的数据pop出来,即可完成先进先出的效果。

class CQueue {
    //定义两个数组,stack1用来存数据,stacke2用来推数据
    var stack1: [Int] = []
    var stack2: [Int] = []
    init() {
    }
    
    func appendTail(_ value: Int) {
        //存数据
        stack1.append(value)
    }
    
    func deleteHead() -> Int {
        // 取数据
        if stack2.isEmpty{
            stack2 = stack1.reversed()
            stack1 = []
            }
             return stack2.popLast() ?? -1
             //??是空合运算符,如果stack.popLast()为空,则返回-1
        }
    }

但在实际操作中,采用一个一个赋值再推入stack2里,leetcode显示时间时限过长,所以为了降低时间复杂度,直接用reversed()方法,将reverse过的stack1赋值给stack2,再将stack1初始化即可,也可以达到两个栈之间先取后存的逆序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值