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

来源:互联网 发布:xp ie8 淘宝 版本过低 编辑:程序博客网 时间:2024/06/05 20:00
# -*- 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 self.stack2==[]:            while self.stack1:                self.stack2.append(self.stack1.pop())            return self.stack2.pop()        return self.stack2.pop()

引用来源
作者:MaXboy
链接:https://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6
来源:牛客网

MaXboy :1,整体思路是元素先依次进入栈1,再从栈1依次弹出到栈2,然后弹出栈2顶部的元素,整个过程就是一个队列的先进先出
2,但是在交换元素的时候需要判断两个栈的元素情况:
“进队列时”,队列中是还还有元素,若有,说明栈2中的元素不为空,此时就先将栈2的元素倒回到栈1 中(代码中第二个return),保持在“进队列状态”。
“出队列时”,将栈1的元素全部弹到栈2中,保持在“出队列状态”。
所以要做的判断是,进时,栈2是否为空,不为空,则栈2元素倒回到栈1,出时,将栈1元素全部弹到栈2中,直到栈1为空。