博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Two queues implement stack.

Posted on 2013-07-25 16:18  钟悍  阅读(316)  评论(0编辑  收藏  举报
class StackWithTwoQueue<E> {
    private Queue<E> queue1 = new LinkedList<E>();
    private Queue<E> queue2 = new LinkedList<E>();

    public synchronized void push(E e) {
        if (queue1.isEmpty()) {
            queue2.add(e);
        } else {
            queue1.add(e);
        }
    }

    public synchronized E pop() throws Exception {
        if (queue1.isEmpty() && queue2.isEmpty()) {
            throw new Exception("Stack is empty!");
        }
        if (!queue1.isEmpty()) {
            while (queue1.size() > 1) {
                queue2.add(queue1.poll());
            }
            return queue1.poll();
        } else {
            while (queue2.size() > 1) {
                queue1.add(queue2.poll());
            }
            return queue2.poll();
        }

    }
}