Simple java solution using two stacks


  • 0
    M
    class MyQueue {
        // Push element x to the back of queue.
        Stack<Integer> s1=new Stack<Integer>();
        Stack<Integer> s2=new Stack<Integer>();
        public void push(int x) {
            s1.push(x);
        }
    
        // Removes the element from in front of queue.
        public void pop() {
             while(!s1.isEmpty())
                {
                    s2.push(s1.pop());
                }
                s2.pop();
                while(!s2.isEmpty())
                {
                    s1.push(s2.pop());
                }
            
        }
    
        // Get the front element.
        public int peek() {
            int x=0;
            while(!s1.isEmpty())
            {
                s2.push(s1.pop());
            }
            x= s2.peek();
            while(!s2.isEmpty())
            {
                s1.push(s2.pop());
            }
        
            return x;
        }
    
        // Return whether the queue is empty.
        public boolean empty() {
            return (s1.isEmpty() && s2.isEmpty());
        }
    }

  • 0
    E

    Pretty the same as my solution. But I have moved the cycles to push() method then I don't need them in pop and peek. And I need to check only one stack to be empty -- s1. s2 is always empty.


  • 0
    M

    yeah ur right s2 is always empty
    missed that detail


  • 0
    E

    Actually there is much better solution that yours or mine. Look for solution sharing with amortized in the title. Imagine that someone has pushed 1 million object into your queue. Repacking will happen maaaaaaaany time which can be avoided.


  • 0
    M

    hey thanks man !!


Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.