232. 用栈实现队列
思路:用两个list去模拟栈的操作,一个入栈list,一个出栈list. 并且了解栈的操作,pop,peek,push.
代码:
def __init__(self):
self.stack1 = [] #入栈
self.stack2=[] #出栈
def push(self, x: int) -> None:
self.stack1.append(x)
def pop(self) -> int:
if self.empty():
return None
if self.stack2:
return self.stack2.pop()
else:
for i in range(len(self.stack1)):
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
def peek(self) -> int:
res = self.pop()
self.stack2.append(res)
return res
def empty(self) -> bool:
return not (self.stack1 or self.stack2)
225. 用队列实现栈
思路:
这里使用一个主进栈队列和一个 辅助队列进行后入先出操作。将入队的元素放入queue2中,然后queue1&2进行互换。这里有一个小细节,循环这里不包括最后一个元素,不然你直接交换就没什么区别了。
代码:
def __init__(self):
self.queue_in = deque()
self.queue_out = deque()
def push(self, x: int) -> None:
self.queue_in.append(x)
def pop(self) -> int:
if self.empty():
return None
for i in range(len(self.queue_in)-1):
self.queue_out.append(self.queue_in.popleft())
self.queue_in,self.queue_out = self.queue_out,self.queue_in
print(self.queue_out)
return self.queue_out.popleft()
def top(self) -> int:
if self.empty():
return None
return self.queue_in[-1]
def empty(self) -> bool:
return len(self.queue_in)==0