用两个栈实现队列
时间限制:1秒 空间限制:32768K 热度指数:379734
本题知识点: 队列 栈
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
代码
新刷:2020年03月10日18:56:41
思路:只要有两个数组(只能append和pop)就可以实现
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.s = [] # 1,2,3,4 顺序存储,中间变量,每次新push的时候使用
self.r = [] # 4,3,2,1 逆序存储,最后pop()
# 只能用append(push),pop
def push(self, node):
# write code here
while self.r:
self.s.append(self.r.pop())
self.s.append(node)
while self.s:
self.r.append(self.s.pop())
def pop(self):
# return xx
return self.r.pop()
old:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.inStack = []
self.outStack = []
def push(self, node):
# 加入元素
# write code here
self.inStack.append(node)
def pop(self):
# 弹出元素
# return xx
self.peek()
return self.outStack.pop()
def peek(self):
# 返回栈顶元素
if self.outStack == []:
while self.inStack:
self.outStack.append(self.inStack.pop())
return self.outStack[-1]
二刷:2019年4月24日 18:22:25
注意:__init__
后不要忘记带(self)
还可以使用以下代码:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.in_stack = []
self.out_stack = []
def push(self, node):
# write code here
self.in_stack.append(node)
def pop(self):
# return xx
# 切记:每次 in_stack 填 out_stack 之前要判断 out_stack 已经为空
# 因为队列是先进先出:只有把 out_stack pop完才能再往里边添加
if self.out_stack == []:
while self.in_stack:
self.out_stack.append(self.in_stack.pop())
return self.out_stack.pop()
运行时间:22ms
占用内存:5728k