Implemente una cola con dos pilas. La declaración de la cola es la siguiente: implemente sus dos funciones appendTail y deleteHead para completar las funciones de insertar enteros al final de la cola y eliminar enteros en la cabecera de la cola. (Si no hay elementos en la cola, la operación deleteHead devuelve -1)
Ejemplo 1:
输入 :
["CQueue", "appendTail", "deleteHead", "deleteHead"]
[[], [3], [], []]
输出 : [nulo, nulo, 3, -1]
Ejemplo 2
输入 :
["CQueue", "deleteHead", "appendTail", "appendTail", "deleteHead", "deleteHead"]
[[], [], [5], [2], [], []]
输出 :: [nulo, -1, nulo, nulo, 5,2]
Consejos:
1 <= valores <= 10000 se realizarán
hasta 10000 llamadas para agregar Tail y deleteHead
Fuente: enlace LeetCode (LeetCode)
: https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof los
derechos de autor pertenecen a la red de deducción. Comuníquese con la autorización oficial para la reimpresión comercial e indique la fuente de la reimpresión no comercial.
Idea 1: Dos pilas: pila de datos + pila auxiliar
Debería ser que el orden de la pila y la cola es exactamente el opuesto, entonces las dos pilas son iguales (invertidas dos veces).
class CQueue:
def __init__(self):
self.stack1 = [] # 存数
self.stack2 = [] #
def appendTail(self, value: int) -> None:
while self.stack1 != []:
self.stack2.append(self.stack1.pop())
self.stack2.append(value)
while self.stack2 != []:
self.stack1.append(self.stack2.pop())
return None
def deleteHead(self) -> int:
if self.stack1 == []:
return -1
else:
return self.stack1.pop()
# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()
Idea 2: Dos pilas: pila de datos + pila auxiliar (mejorada)
class CQueue:
def __init__(self):
self.stack_in = []
self.stack_out = []
def appendTail(self, value: int) -> None:
self.stack_in.append(value)
def deleteHead(self) -> int:
if not self.stack_out:
if not self.stack_in:
return -1
while self.stack_in:
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()