兩個棧實現一個隊列看這裏
本文是兩個隊列實現一個棧
思路,構造兩個隊列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());
}
}
}