用两个队列实现栈的操作

牧云@^-^@ 提交于 2019-12-02 15:06:39
public class MyStack<E> {
    private Queue<E> Q1=new LinkedList<>();
    private  Queue<E> Q2=new LinkedList<>();
    public E push(E e){
        if(Q1.isEmpty()&&Q2.isEmpty()){
            Q1.add(e);
        }
        if(Q1.isEmpty()){
            Q2.add(e);
        }
        if(Q2.isEmpty()){
            Q1.add(e);
        }
        return e;
    }

    public E pop(){
        if(Q1.isEmpty()&&Q2.isEmpty()){
            try {
                throw new Exception("the stack is empty");
            }catch (Exception e){
                e.printStackTrace();
            }

        }
        if(Q1.isEmpty()){
            while (Q2.size()>1){
                Q1.add(Q2.poll());
            }
            return Q2.poll();
        }
        if(Q2.isEmpty()){
            while (Q1.size()>1){
                Q2.add(Q1.poll());
            }
            return Q1.poll();
        }
        return null;
    }
    public E peek(){
        if(Q1.isEmpty()&&Q2.isEmpty()){
            try {
                throw new Exception("the stack is empty");
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        if(Q1.isEmpty()){
            while(Q2.size()>1){
                Q1.add(Q2.poll());
            }
            E e=Q2.peek();
            Q1.add(Q2.poll());
            return e;
        }
        if(Q2.isEmpty()){
            while(Q1.size()>1){
                Q2.add(Q1.poll());
            }
            E e=Q1.peek();
            Q2.add(Q1.poll());
            return e;
        }
        return null;
    }
    
    public boolean empty(){
        return Q1.isEmpty()&&Q2.isEmpty();
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!