劍指offer[用兩個棧實現佇列]
阿新 • • 發佈:2018-11-24
劍指offer[用兩個棧實現佇列]
題目描述
用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。
思路
用第一個棧來push,用第二個棧來pop。其中第二個棧pop之前如果為空需要將第一個棧的資料通過push來壓入(注意:必須加判斷第二個棧是否為空,否則不能保證stack2棧頂為先進的!!!)
程式碼
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.isEmpty()){//此處判斷必加
while(!stack1.empty()) {
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
細節知識
- 此題我理解有兩種解法,第一種如上寫的,這樣做棧2非空之前pop的都為上一次棧1push進來的,等棧2的資料都pop完之後,棧1堆積的資料在重新一次都push進棧2來。
- 第二種是每次從棧2pop取值之後,都把剩餘的資料pop進棧1,這樣做會導致每次棧2pop之前都為空,需要從棧1pop值來。