【剑指offer】两个栈实现一个队列、两个队列实现一个栈

1.两个栈实现一个队列

思路:puch:直接append到第一个stack1中即可

pop:先pop stack1中元素append到Stack2中,再pop stack2即可实现后进先出的队列操作。当stack1和stack2都没有值时返回空,如果stack2有值直接pop,没有将stack1中值全部append进去。

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack1 = []
        self.stack2 = []
    def push(self, node):
        # write code here
        self.stack1.append(node)
    def pop(self):
        # return xx
        if len(self.stack2) == 0 and len(self.stack1) == 0:
            return
        elif len(self.stack2) == 0:
            while len(self.stack1) > 0:
                self.stack2.append(self.stack1.pop())
        return self.stack2.pop()

2.两个队列实现栈


在push的时候,往非空的那个队列添加(刚刚初始化的时候,两个队列都为空,随便往哪个队列push都行 上图步骤1和步骤3

在pop的时候,如果队列1不为空,就把队列1中q1.size()-1个元素poll出来,添加到队列2中(上图步骤2中元素1和2),再把队列中那个最后的元素poll出来(步骤2中元素3)

这两个队列中始终有一个是空的。另一个非空。push添加元素到非空队列中,pop把非空队列中前面的元素都转移到另一个队列中,只剩最后一个元素,再把最后一个元素pop出来。这样这一个队列是空的,另一个队列又非空了。


# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.queue1 = []
        self.queue2= []
    def push(self, node):
        # write code here
        if self.queue1:
            self.queue1.append(node)
        else:
            self.queue2.append(node)
    def pop(self):
        # return xx
        if not self.queue1 and not self.queue2:
            return None
        if self.queue1:
            while(len(self.queue1)>1):
                self.queue2.append(self.queue1.pop(0))
            return self.queue1.pop(0)
        else:
            while(len(self.queue2)>1):
                self.queue2.append(self.queue2.pop(0))
            return self.queue2.pop(0)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值