自己在做leeCode 劍指offer09“用兩個堆疊實作佇列” 的時候,自己非要用增強for回圈去遍歷堆疊,然后就出問題了,發現輸出和預期完全相反的結果,如下圖
代碼是這樣寫的:

然而leecode回傳結果卻是:

Stack的原始碼內部是通過陣列實作的,
執行push() 時將元素追加到陣列末尾,
執行peek() 時回傳陣列末尾元素(不洗掉該元素),
執行pop() 時取出陣列末尾元素,并將該元素從陣列中洗掉,
所以 用foreach或者迭代器訪問的時候,是按照陣列從索引0開始的方式遍歷的!!
即:從堆疊底到堆疊頂;剛好和彈堆疊的方式相反!!!
所以,涉及元素出堆疊的時候,萬萬不可用foreach或迭代器
public static void main(String[] args) { Stack<Integer> stk = new Stack<>(); stk.push(3); stk.push(2); stk.push(1); print("\n迭代器訪問順序: "); Iterator iter = stk.iterator(); while(iter.hasNext()) { print((int)iter.next()); } print("\nforeach訪問順序: "); for (int num : stk) print(num); print("\n彈堆疊訪問順序: "); while (!stk.empty()) print(stk.pop()); } 輸出結果: 迭代器訪問順序: 3 2 1 foreach訪問順序: 3 2 1 彈堆疊訪問順序: 1 2 3
所以后來乖乖的用普通for回圈去遍歷:

然后就過了....
本文參考:https://blog.csdn.net/qq_43778308/article/details/108483525
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/299801.html
標籤:其他
上一篇:動手實作一個跳表
