給定單鏈表頭節點,每 k 個節點一組翻轉,不足 k 的尾部保持原序。要求 O(1) 額外空間,只能修改節點指針不能修改值。
例:1→2→3→4→5, k=2 → 2→1→4→3→5;k=3 → 3→2→1→4→5。
使用虛擬頭節點 dummy 簡化邊界。維護 pre 指向待翻轉組的前一個節點。每輪:
1. 檢查剩餘節點是否 ≥ k(用 tail 走 k 步)。
2. 翻轉 pre->next 到 tail 之間的鏈表。
3. 將翻轉後的頭尾重新接回主鏈,更新 pre 為翻轉前的頭(現為尾)。