您的位置:首页 > 产品设计 > UI/UE

两个队列实现一个栈[leetcode]Implement Stack using Queues

2016-02-19 13:54 621 查看
题目:用队列实现栈的功能

思路:队列和栈的主要区别在于元素的进出顺序,当执行pop/top操作的时候,相当于将一个队列中的所有数据(除了最下面的元素)都倒出来,只剩最后一个元素,这个元素就是我们要取得元素,这里使用两个队列,push和empty方法都很容易完成,pop和top方法本质上是一样的,首先我们要保证至少一个队列是空的,当使用pop/top方法的时候,先将有元素的队列除了最后一个元素一个个的取出放到另一个队列中,这时候如果是执行pop操作,直接将最后一个元素poll出,若是top操作,则是将这个元素peek好以后再offer到另一个队列中去,附上源码:

class MyStack {

    Queue<Integer> queueOne,queueTwo;

    public MyStack(){

        queueOne = new LinkedList<Integer>();

        queueTwo = new LinkedList<Integer>();

    }

    // Push element x onto stack.

    public void push(int x) {

        if (!queueOne.isEmpty()){

            queueOne.offer(x);

        }

        if (!queueTwo.isEmpty()){

            queueTwo.offer(x);

        }

        if (queueOne.isEmpty() && queueTwo.isEmpty()){

            queueOne.offer(x);

        }

    }

    // Removes the element on top of the stack.

    public void pop() {

        if (!queueOne.isEmpty()){

            while (queueOne.size() > 1){

                queueTwo.offer(queueOne.poll());

            }

            queueOne.poll();

        }else {

            while (queueTwo.size() > 1){

                queueOne.offer(queueTwo.poll());

            }

            queueTwo.poll();

        }

    }

    // Get the top element.

    public int top() {

        if (!queueOne.isEmpty()){

            while (queueOne.size() > 1){

                queueTwo.offer(queueOne.poll());

            }

            int tmp = queueOne.peek();

            queueTwo.offer(queueOne.poll());

            return tmp;

        }else {

            while (queueTwo.size() > 1){

                queueOne.offer(queueTwo.poll());

            }

            int tmp = queueTwo.peek();

            queueOne.offer(queueTwo.poll());

            return tmp;

        }

    }

    // Return whether the stack is empty.

    public boolean empty() {

        if (queueOne.isEmpty() && queueTwo.isEmpty()){

            return true;

        }

        return false;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息