1. 程式人生 > >【面試題】兩個佇列實現一個棧

【面試題】兩個佇列實現一個棧

題目:用佇列來實現棧。

用兩個佇列來回倒騰基本就可以了,假設有兩個佇列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;
	}
	

}

輸出: