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