18_225. 用佇列實現棧
阿新 • • 發佈:2022-03-23
題目描述:
解題思路:
- 用兩個佇列:一個用來當做棧,一個用來當做輔助佇列,佇列用來維持當做棧的那個原有的順序,因此可以先把當前元素進入到輔助佇列、然後把棧那個元素按順序取出來放到輔助佇列,這樣輔助佇列就成了新的棧,交換兩個佇列即可。
- 一個佇列:在入棧之前,先記錄此時棧中元素的個數n,然後將當前元素入佇列,再依次把n個元素取出來,依次放到佇列尾即可。
程式碼:
兩個佇列
//兩個佇列: class MyStack { Queue<Integer> queue1; Queue<Integer> queue2; public MyStack() { queue1 = new LinkedList<Integer>();//當作棧,隊頭當做棧頂 queue2 = new LinkedList<Integer>();//輔助佇列,用來維持棧中元素,現有的順序 } public void push(int x) { queue2.offer(x); while (!queue1.isEmpty()) { queue2.offer(queue1.poll()); } Queue<Integer> temp = queue1; queue1 = queue2; queue2 = temp; } public int pop() { return queue1.poll(); } public int top() { return queue1.peek(); } public boolean empty() { return queue1.isEmpty(); } } /** * Your MyStack object will be instantiated and called as such: * MyStack obj = new MyStack(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.top(); * boolean param_4 = obj.empty(); */
一個佇列
//一個佇列: class MyStack { //佇列,可以維持元素的順序 Queue<Integer> queue;//使用一個隊列當做棧,記錄在push之前元素的個數n,在push之後,依次取出該佇列中的n個元素,然後依次新增到佇列尾 public MyStack() { queue = new LinkedList<Integer>();//當作棧,隊頭當做棧頂 } public void push(int x) { int size = queue.size(); queue.offer(x); for (int i = 0; i < size; i++) { queue.offer(queue.poll()); } } public int pop() { return queue.poll(); } public int top() { return queue.peek(); } public boolean empty() { return queue.isEmpty(); } } /** * Your MyStack object will be instantiated and called as such: * MyStack obj = new MyStack(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.top(); * boolean param_4 = obj.empty(); */