iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
自我挑戰組

用 C/C++ 或 Rust 刷 Leetcode系列 第 21

「 Linked list」 : 24 Swap Node in Pairs

  • 分享至 

  • xImage
  •  

Leetcode 24 Swap Node in Pairs (Medium)
題目: 給定一個鍊結串列,交換每兩個相鄰節點並返回其首節點。您必須在不修改串列
節點中的值的情況下解決問題。

解題想法:

  1. 判斷邊界條件:當鏈表是空或只有一個節點時,直接返回頭節點 head。
  2. 設定初始變數:
    • newHead 新鍊節串列的首節點(也就是串列的第二個節點)
    • currPairStart 指向目前處理的節點(即每對中的第一個節點)。
    • prevPairEnd 用來連接前一對交換過的節點和當前的節點對。
  3. 迴圈處理相鄰節點對:
    • 在迴圈中,先保存下一對節點的起始節點 nextPairStart。
    • 再將當前對中的第二個節點連接到前一對,然後執行交換操作。
    • 最後更新指標,進入下一對節點處理。
struct ListNode* swapPairs(struct ListNode* head) {
    if (!head || !head->next) return head;
    
    struct ListNode *newHead = head->next;
    struct ListNode *currPairStart = head;
    struct ListNode *prevPairEnd = NULL;

    while (currPairStart && currPairStart->next) {
        struct ListNode* nextPairStart = currPairStart->next->next;
        if(prevPairEnd)
            prevPairEnd->next = currPairStart->next;
        
        currPairStart->next->next = currPairStart; 
        currPairStart->next = nextPairStart;

        prevPairEnd = currPairStart;
        currPairStart = nextPairStart;
    }

    return newHead;
}

今天我原本想練習 linked list dummy, pointer to pointer的技巧,但我寫太不熟練,因此都寫得不是很順利,希望明天能在分享相關題目


上一篇
「Trie」: 208. Implement Trie
下一篇
「鍊節串列裡的 pointer to pointer」 : 82. Remove Duplicates from Sorted List II
系列文
用 C/C++ 或 Rust 刷 Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言