用队列实现栈

目录

一、题目

二、思路

三、代码实现


一、题目

用队列实现栈_第1张图片

二、思路

1.入栈的时候,入到不为空的队列,刚开始都为空指定入到一个队列

2.入栈的时候,找到不为空的队列,出size-1个元素到另一个队列中,剩下的这个元素就是出栈的元素

如图所示:

用队列实现栈_第2张图片

三、代码实现

class MyStack {

    private Queue qu1;
    private Queue qu2;

    public MyStack() {
        qu1 = new LinkedList<>();
        qu2 = new LinkedList<>();
    }
    
    public void push(int x) {
        if(! qu1.isEmpty()){
            qu1.offer(x);
        }else if(! qu1.isEmpty()){
            qu2.offer(x);
        }else{
            qu1.offer(x);
        }
    }
    
    public int pop() {
        if(empty()){
            return -1;
        }
        if(! qu1.isEmpty()){
            int size = qu1.size();
            for(int i = 0; i < size - 1; i++){
                int val = qu1.poll();
                qu2.offer(val);
            }
            return qu1.poll();
        }
        if(! qu2.isEmpty()){
            int size = qu2.size();
            for(int i = 0; i < size - 1; i++){
                int val = qu2.poll();
                qu1.offer(val);
            }
            return qu2.poll();
        }
        return -1;
    }
    
    public int top() {
        if(empty()){
            return -1;
        }
        if(! qu1.isEmpty()){
            int val = -1;
            int size = qu1.size();
            for(int i = 0; i < size; i++){
                val = qu1.poll();
                qu2.offer(val);
            }
            return val;
        }
        if(! qu2.isEmpty()){
            int val = -1;
            int size = qu2.size();
            for(int i = 0; i < size; i++){
                val = qu2.poll();
                qu1.offer(val);
            }
            return val;
        }
        return -1;
    }
    
    public boolean empty() {
        return qu1.isEmpty() && qu2.isEmpty();
    }
}

你可能感兴趣的:(数据结构相关题,java,数据结构,leetcode)