牛客题霸NC76用两个栈实现队列Java题解
方法:借助两个栈
解题思路:队列是先进先出,栈是先进后出。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栈顶元素
}
}
}
}