博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer---两个栈实现队列
阅读量:4302 次
发布时间:2019-05-27

本文共 1274 字,大约阅读时间需要 4 分钟。

剑指offer—两个栈实现队列

题目描述:

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

使用一个栈stack1 来存储队列插入的值,使用另一个栈stack2 来进行队列删除。因为队列是先进先出,而栈是后进先出的,因此插入将先把值插入到stack1 中,删除时需要改变值的顺序,将stack1 中栈顶的值一次pop()stack2 中,此时stack2 中的栈顶元素就变为了最先进行到队列中的元素,弹出即完成了出队列工作。

代码如下:

# -*- coding:utf-8 -*-class Solution:    def __init__(self):        self.stack1 = []        self.stack2 = []    def push(self, node):        self.stack1.append(node)    def pop(self):        if len(self.stack2) == 0:            if len(self.stack1) == 0:                return None            else:                for i in range(len(self.stack1)):                    self.stack2.append(self.stack1.pop())        return self.stack2.pop()

该题可以扩展为使用两个队列来实现一个栈:同样的使用两个队列queue1queue2 来分别进行入栈和出站操作。入栈时将元素压入queue1 中,出栈时需要popqueue1 中的最后被压入的元素。因此将最后被压入元素的前几个元素压入到queue2 中,这时queue1 中就值剩下了最后被压入的元素,将其pop 出即可。在这里将queue1queue2 进行交换,便于继续pop 操作。

代码如下:

class Solution:    def __init__(self):        self.queue1 = []        self.queue2 = []    def push(self, node):        self.queue1.append(node)    def pop(self):        if len(self.queue1) == 0:            return None        while len(self.queue1) != 1:            self.queue2.append(self.queue1.pop())        self.queue2, self.queue1 = self.queue1, self.queue2        return self.queue2.pop()

转载地址:http://xqmws.baihongyu.com/

你可能感兴趣的文章
Eclipse-maven项目不将resources下的文件打到classpath下
查看>>
SpringMvc-ResponseBodyAdvice接口与@ControllerAdvice注解
查看>>
Java的匿名内部类
查看>>
浅谈异常与恋爱
查看>>
java中的反射总结
查看>>
java中的泛型总结
查看>>
java中的正则操作总结
查看>>
java中的IO操作总结(一)
查看>>
java中的IO操作总结(二)
查看>>
java中的IO操作总结(三)
查看>>
java中的IO操作总结(四)
查看>>
Java 内部类种类及使用解析
查看>>
匿名内部类精讲
查看>>
如何在ubuntu下设置永久的alias别名
查看>>
Apache与Nginx的优缺点比较
查看>>
3种PHP连接MYSQL数据库的常用方法
查看>>
linux命令(6) zip/unzip及tar压缩与解压文件命令笔记
查看>>
linux命令(7)ubuntu的vim命令用法
查看>>
使用nginx配置多个php-fastcgi负载均衡
查看>>
CURL抓取网页内容并用正则提取。
查看>>