牛客题霸NC76用两个栈实现队列Java题解

牛客题霸NC76用两个栈实现队列Java题解

https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=117&&tqId=34998&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

方法:借助两个栈
解题思路:队列是先进先出,栈是先进后出。stack1栈实现入队功能,stack2栈实现出队功能。对于push操作,直接将值压入stack1中。对于pop操作,先判断stack2是否为null,如果不为null,直接返回stack2的栈顶元素,如果stack2为null,再判断stack1是否为null,如果stack1为null,则没有数据,pop()失败,返回-1,如果stack1不为null,则将stack1中的元素依次弹出后压入stack2中,再返回stack2的栈顶元素。

import java.util.Stack;
 
public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
 
    public void push(int node) {
        stack1.add(node);        //push操作,直接将值压入stack1中
    }
 
    public int pop() {            //pop操作,弹出stack2的栈顶元素
        if(!stack2.isEmpty()){   //如果stack2不为null
            return stack2.pop();
        }else{                    //如果stack2为null
             if(stack1.isEmpty()){ //如果stack1为null
                 return -1;        //如果stack1和stack2都为null,返回-1
             }else{                //如果stack1不为null
                 while(!stack1.isEmpty()){   //将stack1中的元素弹出压入stack2中
                     stack2.add(stack1.pop());
                 }
                 return stack2.pop();        //返回stack2栈顶元素
             }
        }
    }
}

 

posted @ 2020-11-25 14:04  云飞扬°  阅读(193)  评论(0编辑  收藏  举报