24. 兩兩交換連結串列中的節點
阿新 • • 發佈:2020-11-17
題目:
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例 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/
題解中提供了兩種解法:遞迴,迭代,自己寫的思路與迭代思路類似。(自己都過了,題解就不看了哈)