用两个栈实现一个队列。队列的声明如下:
请实现它的两个函数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日)
本文介绍如何使用两个栈实现队列的基本操作,包括插入和删除元素,同时探讨了用两个队列模拟栈的过程。通过巧妙的数据结构转换,实现了不同抽象数据类型之间的功能转换。
&spm=1001.2101.3001.5002&articleId=100049500&d=1&t=3&u=eecd0ee3de1c41769da5ca7b903902b6)
190

被折叠的 条评论
为什么被折叠?



