1. 程式人生 > 實用技巧 >24. 兩兩交換連結串列中的節點

24. 兩兩交換連結串列中的節點

題目:

給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

示例 1:

輸入:head = [1,2,3,4]
輸出:[2,1,4,3]


示例 2:

輸入:head = []
輸出:[]


示例 3:

輸入:head = [1]
輸出:[1]

提示:

連結串列中節點的數目在範圍 [0, 100] 內
0 <= Node.val <= 100

解答:

自己的程式碼,使用三個ListNode*,pFront,p1,p2,三個節點的交換邏輯如下:

//swap
pFront->next = p2->next;
p2->next = p1;
p1->next = pFront->next;
pFront->next = p2;

//24. 兩兩交換連結串列中的節點
ListNode* swapPairs(ListNode* head) 
{
    if (head == nullptr)
        return nullptr;

    ListNode dummy;
    dummy.next = head;

    ListNode*pFront = &dummy;
    ListNode* p1 = pFront->next, *p2=nullptr;
    while (pFront != nullptr)
    {
        p1 = pFront->next;
        
if (p1 == nullptr) break; p2 = p1->next; if (p2 == nullptr) break; //swap pFront->next = p2->next; p2->next = p1; p1->next = pFront->next; pFront->next = p2; //next pFront = p2->next; }
return dummy.next; }

一次提交後超過100%,好開心O(∩_∩)O哈哈~

題解:https://leetcode-cn.com/problems/swap-nodes-in-pairs/solution/liang-liang-jiao-huan-lian-biao-zhong-de-jie-di-91/

題解中提供了兩種解法:遞迴,迭代,自己寫的思路與迭代思路類似。(自己都過了,題解就不看了哈)