用队列实现栈oj

题目内容:

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

解题思路:

  • 首先考虑使用两个队列,队列的特性是先入先出,而栈的是后进先出
  • 我们给定两个队列,一个队列一直保持空,只有在进行相应操作时会存在不空的情况
  • 当一个队列中放入了元素,当要获取栈顶元素或者进行出栈时,就让这个队列中的元素依次放入到另一个队列中,只保留最后一个元素,进行peek或者是pop操作

解题代码:

class MyStack {
    Queue q1 = new LinkedList<>();
    Queue q2 = new LinkedList<>();
    public MyStack() {

    }
    
    public void push(int x) {
        q1.offer(x);
    }
    
    public int pop() {
        if(!q1.isEmpty()){
            while(q1.size() > 1){
                q2.offer(q1.poll());
            }
            return q1.poll();
        }else{
            while(q2.size() > 1){
                q1.offer(q2.poll());
            }
            return q2.poll();
        }
    }
    
    public int top() {
        int ret = 0;
        if(!q1.isEmpty()){
            while(q1.size() > 1){
                q2.offer(q1.poll());
            }
            ret =  q1.poll();
            q2.offer(ret);

        }else{
            while(q2.size() > 1){
                q1.offer(q2.poll());
            }
            ret = q2.poll();
            q1.offer(ret);
        }
        return ret;
    }
    
    public boolean empty() {
        if(q1.isEmpty() && q2.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

 

你可能感兴趣的:(剑指offer,队列,栈,leetcode)