两个栈实现一个队列看这里
本文是两个队列实现一个栈
思路,构造两个队列q1和q2,入栈的时候把元素扔到q1里,
出栈的时候检查q1是否只有一个元素,是的话直接返回就行,
不是的话:
- 将q1中的前n-1个元素放到q2里,
- q1中剩余的一个元素就是该出栈的元素,remove掉,这里需要记录该值,不能直接返回,因为还要对后续q2进行操作。
- q2中全部元素放回q1
相当于q2就是个中转的队列,所有操作都是在q1进行的。
import java.util.LinkedList;
import java.util.Queue;
public class Q2Stack {
Queue<Integer> q1 = new LinkedList<Integer>();
Queue<Integer> q2 = new LinkedList<Integer>();
public static void main(String[] args) {
Q2Stack q= new Q2Stack();
q.push(5);
q.push(3);
q.push(2);
q.remove();
q.remove();
q.remove();
}
public void push(Integer num){
q1.add(num);
}
public void remove(){
Integer res;
if(q1.size() == 1){
res = q1.remove();
System.out.println(res);
return;
}
while(q1.size() > 1){
q2.add(q1.remove());
}
res = q1.remove();
System.out.println(res);
while(q2.size() >=1){
q1.add(q2.remove());
}
}
}