創作不易,本篇文章如果幫助到了你,還請點贊 關注支持一下?>𖥦<)!!
主頁專欄有更多知識,如有疑問歡迎大家指正討論,共同進步!
更多算法知識專欄:算法分析🔥
給大家跳段街舞感謝支持!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
LeetCode題解專欄:【LeetCode刷題筆記】
目錄
- 題目鏈接
- 一、題目描述
- 二、示例
- 三、題目分析
- 四、代碼實現(C++)
題目鏈接
LeetCode.24.兩兩交換鏈表中的節點
一、題目描述
給你一個鏈表,兩兩交換其中相鄰的節點,并返回交換后鏈表的頭節點。
你必須在不修改節點內部的值的情況下完成本題(即,只能進行節點交換)。
二、示例
示例 1:
輸入:head = [1,2,3,4]
輸出:[2,1,4,3]
示例 2:
輸入:head = []
輸出:[]
示例 3:
輸入:head = [1]
輸出:[1]
三、題目分析
遞歸法:
swapPairs
函數代表:返回兩兩節點交換后的頭節點
邊界條件:節點為空或者鏈表中只有一個節點
定義兩個指針pre
和 cur
,分別指向要交換的兩個相鄰節點(pre 指向第一個節點,cur 指向第二個節點)
pre
節點,通過遞歸調用swapPairs
函數來處理后面剩余的子鏈表,并將返回值連接到pre
節點的next
指針,就完成了對后續子鏈表的交換處理
然后將cur
節點的next
指針指向pre
節點,完成當前這對相鄰節點pre
和cur
的交換。
迭代:
使用虛擬頭節點dummy
用來避免特殊情況的處理
四、代碼實現(C++)
遞歸:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {if(head == nullptr || head->next == nullptr) return head;auto pre = head;auto cur = head->next;//將pre節點下一個指向 后續交換后的節點pre->next = swapPairs(cur->next);//將cur節點的下一個指向pre 此時完成了兩個結點的交換cur->next = pre;return cur;}
};
迭代:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {//虛擬頭節點ListNode* dummy = new ListNode(0, head);ListNode* cur = dummy;while (cur->next && cur->next->next) {// node1 指向 cur 的下一個節點(要交換的第一對節點中的第一個)ListNode* node1 = cur->next;// node2 指向 cur 的下下個節點(要交換的第一對節點中的第二個)ListNode* node2 = cur->next->next;// 將第二對節點中的第一個節點提到前面cur->next = node2;// 將 node1 的下一個節點指向 node2 的下一個節點node1->next = node2->next;// 將 node2 的下一個節點指向 node1,完成這對節點的交換node2->next = node1;// cur 稱為交換后的第一對節點中的第一個節點(node1)cur = node1;}return dummy->next;}
};
大家的點贊、收藏、關注將是我更新的最大動力! 歡迎留言或私信建議或問題。 |
大家的支持和反饋對我來說意義重大,我會繼續不斷努力提供有價值的內容! |
如果本文哪里有錯誤的地方還請大家多多指出(●'?'●) |