用两个栈实现一个队列。队列的声明如下:
请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。
队列的特征是先进先出
,而栈的特征是先进后出
。那么可以设置stack1
用来压入元素,而stack2
用来弹出元素,其中有这样一个过程来保证规律性,即当stack2
为空时将stack1
中的元素逐个弹出并压入stack2
。
class Solution:
def __init__(self):
self._stack1 = None
self._stack2 = None
def push(self, node):
if self._stack1 is None:
self._stack1 = []
self._stack1.append(node)
def pop(self):
if self._stack2 is None:
self._stack2 = []
if not self._stack2:
if not self._stack1:
return False
while self._stack1:
self._stack2.append(self._stack1.pop())
return self._stack2.pop()
用两个队列实现一个栈。
要求恰恰相反。那么可以设置queue1
用来压入和弹出元素,而queue2
作为缓冲区保存queue1
中的元素,核心在于当queue2
为空时将queue1
中的元素逐个弹出并压入queue2
,直到queue1中
只有一个元素,此时再从queue1
中弹出最后一个元素作为返回值。
class Solution:
def __init__(self):
self._queue1 = None
self._queue2 = None
def push(self, node):
if self._queue1 is None:
self._queue1 = []
if self._queue2 is None:
self._queue2 = []
if self._queue2:
self._queue1.append(node)
else:
self._queue2.append(node)
def pop(self):
if not self._queue1 and not self._queue2:
return False
if self._queue2:
self._queue1, self._queue2 = self._queue2, self._queue1
while len(self._queue1) != 1:
self._queue2.append(self._queue1.pop())
return self._queue1.pop()
(最近更新:2019年09月20日)