題目:用兩個棧來實(shí)現(xiàn)一個隊列险领,完成隊列的Push和Pop操作侨舆。 隊列中的元素為int類型。
代碼
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.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
思路:
由于隊列是先進(jìn)先出的绢陌,而棧是先進(jìn)后出的挨下,也就是說,同樣的數(shù)據(jù)進(jìn)入兩種結(jié)構(gòu)之后
- 隊列彈出數(shù)據(jù)的順序和壓入的順序是一致的脐湾。
- 棧彈出數(shù)據(jù)的順序和壓入數(shù)據(jù)的順序是相反的臭笆。
而本題中說可以用兩個棧,那么
- 首先將數(shù)據(jù)壓入一個棧中,再彈出到另外一個棧愁铺,
- 將這個棧的數(shù)據(jù)彈出鹰霍。
- 結(jié)果就等于最開始壓入的順序了,差不多就是負(fù)負(fù)得正的意思茵乱。
(將數(shù)據(jù)壓入stack1茂洒,然后彈出數(shù)據(jù),依次壓入stack2瓶竭,彈出的時候從stack2彈出督勺。即將stack1中的數(shù)據(jù)倒如stack2中。)
幾個需要注意的點(diǎn):
- 在stack1的數(shù)據(jù)倒入stack2中的時候一定要保證stack1是空的斤贰。否則數(shù)據(jù)的順序會被打亂智哀。