【面試題】兩個佇列實現一個棧
阿新 • • 發佈:2018-12-10
題目:用佇列來實現棧。
用兩個佇列來回倒騰基本就可以了,假設有兩個佇列A、B,初始都為空,將元素放入佇列A中,如果佇列B不為空,將B中的元素全部取出放入A中,這樣B就為空隊列了,然後下次加入元素就加入到B中,如果A不為空就把A中元素全部取出放進B中,這樣A就為空隊列了,就這樣來回倒騰就可以了。可惜面試時候太緊張,腦子轉不動,直接說不會了[汗]。
程式碼:
public class QueueImplStatck { Queue<Integer> queue1 = new LinkedList<>(); Queue<Integer> queue2 = new LinkedList<>(); public static void main(String[] args) { QueueimplStatck stack = new QueueimplStatck(); for (int i = 1; i <=7; i++) { stack.push(i); } while(stack.pop()!=null) System.out.print(stack.pop()+" "); } void push(int num){ if(queue1.size()==0) { queue1.offer(num); while(!queue2.isEmpty()) queue1.offer(queue2.poll()); } if(queue2.size()==0){ queue2.offer(num); while(!queue1.isEmpty()) queue2.offer(queue1.poll()); } } Integer pop(){ if(!queue1.isEmpty()) return queue1.poll(); else if(!queue2.isEmpty()) return queue2.poll(); else return null; } }
輸出: