題目概述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。
考察點
棧和隊列
時間複雜度
入棧O(1)
出棧O(n)
實現思路
-
用兩個棧來實現隊列,棧1的話用來入隊,隊列每進入一個元素就入棧1,棧2的話用來出隊,隊列如果要出隊,首先判斷棧2是不是空,是空,就把棧1彈出來進入棧2(因爲棧是先入後出,兩次先入後出就是先入先出了,負負得正嘛~),然後從棧2開始彈,如果棧2不爲空,直接從棧2開始彈
Java代碼(可以直接複製使用)
public class QueueBasedOnStack {
private Stack<Integer> in = new Stack<Integer>();
private Stack<Integer> out = new Stack<Integer>();
public void push(int node) {
in.push(node);
}
public int pop() {
if (out.isEmpty()) {
//輸出棧爲空 先把數據從輸入棧轉到輸出棧再彈(負負得正)
while (!in.isEmpty()) {
out.push(in.pop());
}
return out.pop();
} else {
//輸出棧不爲空,直接彈
return out.pop();
}
}
}
有問題的小夥伴可以在下方留言哦