Leetcode刷题day9-栈.队列-栈转队列.队列转栈

发布时间 2023-12-09 22:25:50作者: 智障学Leetcode

232.用栈实现队列

232. 用栈实现队列 - 力扣(LeetCode)
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):
实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

解题思路:
构建两个栈,pop时将in栈元素,顺次添加到out栈中,对out栈pop

class MyQueue():
	def __init__(self):
		self.stack_in = []
		self.stack_out = []

	def push(self,x):
		self.stack_in.append(x)

	def pop(self):
		if self.empty():
			return None
		if not self.stack_out:
			for _ in range(len(self.stack_in)):
				self.stack_out.append(self.stack_in.pop())
		return self.stack_out.pop()


	def peek(self):
		if self.empty():
			return None
		ans = self.pop()
		self.stack_out.append(ans)
		return ans


	def empty(self):
		return not (self.stack_in or self.stack_out)

225.用队列实现栈

225. 用队列实现栈 - 力扣(LeetCode)
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。
实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

解题思路:
直接使用python内置函数collections中deque

class MyStack():
	def __init__(self):
		self.deque = deque()

	def push(self,x):
		self.deque.append(x)

	def pop(self):
		if self.empty():
			return None
		return self.deque.pop()

	def top(self):
		if self.empty():
			return None
		return self.deque[-1]

	def empty(self):
		return not len(self.deque)