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)