Iterator 只能單向前進,而 ListIterator 提供 hasPrevious()、previous() 等雙向游標操作,是實現逆序遍歷的標準工具。
ListIterator:list.listIterator()while (li.hasNext()) li.next();while (li.hasPrevious()) System.out.print(li.previous() + " ");import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class IteratorDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) list.add(i);
// 正序輸出
System.out.print("原順序:");
list.forEach(i -> System.out.print(i + " "));
System.out.println();
// 逆序邏輯
ListIterator<Integer> li = list.listIterator();
while (li.hasNext()) li.next(); // 移至末尾
System.out.print("逆序後:");
while (li.hasPrevious()) System.out.print(li.previous() + " ");
}
}

list.listIterator(5) 從索引 5 開始li.set(newVal) 替換當前元素,li.add(newVal) 插入li.nextIndex()、li.previousIndex()❌ 錯誤:
for (li = list.listIterator(); li.hasNext(); li.next())這樣寫會漏掉最後一個元素的逆序輸出。
✅ 正確:分兩步——先單獨循環移至末尾,再逆序循環。
ListIterator 是雙向鏈表遍歷的利器,掌握「先移至末尾、再逆序讀取」模式,即可輕鬆實現 List 的逆序、區間逆序、邊遍歷邊修改等高級操作。