24. Swap Nodes in Pairs
1.題目說明:有一個單向連結串列(Linked List),要「每兩個節點交換一次位置」。
2.限制條件:
- 不允許更改節點的 val,只能調整節點的連結。
- 題目保證:節點數為 0~100。
3.解題思路:
1.為什麼需要 Dummy Node?
- 交換節點時,可能會換掉頭節點(head),這樣就不好處理。
*我們建立一個虛擬節點(dummy),並把它指向原本的 head。
- 最後我們回傳 dummy.next,這樣不管原始 head 被不被交換,我們都能正確得到結果。
ListNode dummy = new ListNode(0); // 建立虛擬節點
dummy.next = head; // 指向原始 head
- 用 current 指針來遍歷
我們用 current 來控制交換的起點(永遠指向前一個節點),這樣可以輕鬆交換 current.next 和 current.next.next。
ListNode current = dummy;
- 開始交換節點
我們每次處理兩個節點,稱為 first 和 second。
while (current.next != null && current.next.next != null) {
ListNode first = current.next;
ListNode second = current.next.next;
// 執行交換
first.next = second.next;
second.next = first;
current.next = second;
// 把 current 向後移到下一組 pair 的前一個節點
current = first;}
4.圖解:

5.程式碼截圖:
6.學習心得::這次選擇的題目是之前老師學期結束後有放一些可以自己挑戰的題目,此題也是其中的一題。今日的題目在前幾天有做過類似的,我覺得今天坐起來相對順一些,依靠AI的地方有逐漸減少,希望這樣一天一天的進步有一天能完全依靠自己來解題。