剑指Offer 5 :两个栈来实现队列(两个队列实现栈)

题目:

是的,我又不想打了,如题

本身这个很基础,主要及时判断一下栈是不是空。但是因为OJ用的不熟练,所以写一个这个OJ

# -*- coding:utf-8 -*-
class Solution:
    def push(self, node):
        # write code here
    def pop(self):
        # return xx

1:不知道怎么把stack放进去,这个栈该放在这个类的哪里

def __init__(self):
    self.stack1 = []
    self.stack2 = []

2:就是剩下的事情了

def push(self, node):
    self.stack1.append(node)
def pop(self):
    if self.stack2:
        return self.stack2.pop()
    elif self.stack1:
        while self.stack1:
            self.stack2.append(self.stack1.pop())
        return self.stack2.pop()
    else:
        return None     

下面是用两个队列实现栈,不想写测试用例了,改天写一个再运行吧。大致思路如下

放入的时候放入那个不空的队列
出的时候要出的就剩一个,其他的放入另一个空队列中,然后把剩下的这一个return

class Solution:
    def __init__(self):
        self.queue1 = []
        self.queue2 = []
    def push(self,data):
        if self.queue1:
            self.queue1.append(data)
        elif self.queue2:
            self.queue2.append(data)
        else:
            self.queue1.qppend(data)
    def pop(self):
        if not self.queue1 and not self.queue2:
            return None
        elif not self.queue2:
            if len(self.queue1) == 1:
                return self.queue1.pop()
            else:
                while len(self.queue1) >1:
                    self.queue2.append(self.queue1.pop())
                return self.queue1.pop()
        else:
            if len(self.queue2) == 1:
                return self.queue2.pop()
            else:
                while len(self.queue2) >1:
                    self.queue1.append(self.queue2.pop())
                return self.queue2.pop()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容