牛客题霸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栈顶元素 } } } }