Queues: A Tale of Two Stacks

  • + 3 comments

    Here is my Python3 solution (100%, no timeouts):

    class MyQueue(object):
        def __init__(self):
            self.stack1 = []
            self.stack2 = []
        
        def peek(self):
            if len(self.stack2) > 0:
                top = self.stack2.pop()
                self.stack2.append(top)
            else:
                while(len(self.stack1) > 1): 
                    self.stack2.append(self.stack1.pop())
                top = self.stack1.pop()
                self.stack2.append(top)
            return top
            
        def pop(self):
            if len(self.stack2) > 0:
                self.stack2.pop()
            else:
                while(len(self.stack1) > 1): 
                    self.stack2.append(self.stack1.pop())
                self.stack1.pop() #stack1 is now empty
            
        def put(self, value):
                self.stack1.append(value)
    
    queue = MyQueue()
    t = int(input())
    for line in range(t):
        values = map(int, input().split())
        values = list(values)
        if values[0] == 1:
            queue.put(values[1])        
        elif values[0] == 2:
            queue.pop()
        else:
            print(queue.peek())