1、题⽬描述:
⽤两个栈来实现⼀个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解析:既然题⽬给了我们两个栈,我们可以这样考虑当push的时候将元素push进stack1,pop的时候我们先把stack1的元素pop到stack2,然后再对stack2执⾏pop操作,这样就可以保证是先进先出的。(负[pop]负[pop]得正[先进先出])
代码:
方法类如下:
package com.testCode;
import java.util.Stack;
/**
* 题⽬描述:
* ⽤两个栈来实现⼀个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
* 解析:既然题⽬给了我们两个栈,我们可以这样考虑当push的时候将元素push进stack1,pop的时候我们先把
* stack1的元素pop到stack2,然后再对stack2执⾏pop操作,这样就可以保证是先进先出的。(负[pop]
* 负[pop]得正[先进先出])
*/
public class twoStackOneQueue {
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
// 入栈
public void push(int node){
stack1.push(node);
}
// 出栈
public int pop(){
// 判断
if (stack1.empty() && stack2.empty()){
throw new RuntimeException("队列为空");
}
if (stack2.empty()){
// 循环将stack1中的元素全部弹到stack2中,然后在将stack2中的元素弹出,然后就是正确的出队顺序了
while (!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
测试类:
package com.testCode;
public class test {
public static void main(String[] args) {
twoStackOneQueue twoStackOneQueue = new twoStackOneQueue();
// 入队 入队顺序为:1,2,3,4,5
twoStackOneQueue.push(1);
twoStackOneQueue.push(2);
twoStackOneQueue.push(3);
twoStackOneQueue.push(4);
twoStackOneQueue.push(5);
// 出队 出队顺序为:1,2,3,4,5
for (int i=0;i<5;i++){
int result = twoStackOneQueue.pop();
System.out.print(result+" ");
}
}
}
结果如下: