思路如下:
队列的结构为先进先出
栈的结构为后进先出,在明确了基本结构后,我们基本的实现想法如下
建立两个栈,分别为栈1和栈2
栈1的作用是push数据,栈2的作用是pop数据
当我们push数据时先进的数据会被压入栈底,但是当我们重新把push进栈1的数据一个一个pop进栈2时,栈底的元素此刻就成为了栈顶,所以pop数据时我们只需要pop栈2中的数据即可
因此,我们在pop数据时要判断栈2是否为空,如果不为空,则pop栈2中的数据,如果为空,我们就要把栈1的元素全部push进栈2,一定要记住,是全部
否则就会造成顺序谬误,不能正常实现功能
具体代码如下
class MAin{
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
Integer re = null;
if(!stack2.empty()){ // 如果栈2不是空的,那么把最上面那个取出来
re=stack2.pop();
}else{
//如果栈2是空的,就把栈1里的数一个个取出来,放到栈2里
while(!stack1.empty()){
re = stack1.pop();
stack2.push(re);
}
//栈2里有数之后,再次把里面的数取出来
if(!stack2.empty()){
re = stack2.pop();
}
}
return re;
}
}