225. Implement Stack using Queues
Two queues
class MyStack:
def __init__(self):
self.primary = collections.deque()
self.secondary = collections.deque()
self._top = None
def _swap(self):
self.primary, self.secondary = self.secondary, self.primary
def push(self, x: int) -> None:
self.primary.append(x)
self._top = x
def pop(self) -> int:
self._top = None
while len(self.primary) > 1:
if len(self.primary) == 2:
self._top = self.primary[0]
self.secondary.append(self.primary.popleft())
self._swap()
return self.secondary.popleft()
def top(self) -> int:
return self._top
def empty(self) -> bool:
return not self.primary
One queue
class MyStack:
def __init__(self):
self.q = collections.deque()
def push(self, x: int) -> None:
self.q.append(x)
N = len(self.q)
for i in range(N - 1):
self.q.append(self.q.popleft())
def pop(self) -> int:
return self.q.popleft()
def top(self) -> int:
return self.q[0]
def empty(self) -> bool:
return len(self.q) == 0