leetcode24. 两两交换链表中的节点(思路+解析)
生活随笔
收集整理的這篇文章主要介紹了
leetcode24. 两两交换链表中的节点(思路+解析)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一:題目
二:思路
思路:
1.分析題意 這是相鄰結(jié)點進(jìn)行交換 如果是4個結(jié)點 那么1和2交換 3和4交換 如果是3個結(jié)點 那么就1和2進(jìn)行交換 3不動
2.這里我們定義一個虛擬頭節(jié)點方便操作,我們只需三步實現(xiàn)結(jié)點的交換
<1>:讓虛擬結(jié)點指向第二個結(jié)點(進(jìn)行交換的結(jié)點我把其分為第一個結(jié)點和第二個結(jié)點)
<2>:第二個結(jié)點指向第一個結(jié)點(這里需要定義一個臨時節(jié)點 保存第一個結(jié)點)
<3>:第一個結(jié)點指向第三個結(jié)點(這里需要定義一個臨時結(jié)點 保存第三個結(jié)點)
3.將定義的虛擬結(jié)點往后移動兩個結(jié)點開始新的交換
三:上碼
/*** 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) {/**思路:1.分析題意 這是相鄰結(jié)點進(jìn)行交換 如果是4個結(jié)點 那么1和2交換 3和4交換如果是3個結(jié)點 那么就1和2進(jìn)行交換 3不動2.這里我們定義一個虛擬頭節(jié)點方便操作,我們只需三步實現(xiàn)結(jié)點的交換<1>:讓虛擬結(jié)點指向第二個結(jié)點(進(jìn)行交換的結(jié)點我把其分為第一個結(jié)點和第二個結(jié)點)<2>:第二個結(jié)點指向第一個結(jié)點(這里需要定義一個臨時節(jié)點 保存第一個結(jié)點)<3>:第一個結(jié)點指向第三個結(jié)點(這里需要定義一個臨時結(jié)點 保存第三個結(jié)點)3.將定義的虛擬結(jié)點往后移動兩個結(jié)點開始新的交換*/ListNode* node = new ListNode(2);//定義一個虛擬結(jié)點node->next = head;//虛擬結(jié)點和鏈表連上了ListNode* cur;//這里我們定義一個新的結(jié)點 方便我們進(jìn)行交換的操作 從而不影響node和鏈表的聯(lián)系cur = node;while(cur->next != NULL && cur->next->next != NULL){ListNode *temp = cur->next;//定義一個臨時結(jié)點 保存指向第一個結(jié)點的指針ListNode *temp1 = cur->next->next->next;//定義一個臨時結(jié)點 保存第指向第三個結(jié)點的指針cur->next = cur->next->next;//第一步 虛擬結(jié)點指向第二個結(jié)點cur->next->next = temp;//第二步 第二個結(jié)點指向第一個結(jié)點cur->next->next->next = temp1;//第三步 此時cur->next 指向第二個結(jié)點 cur->next->next 指向的是第一個結(jié)點 所以該 cur->next->next->next 指向第三個結(jié)點//往后跳兩個結(jié)點cur = cur->next->next;}return node->next;} };總結(jié)
以上是生活随笔為你收集整理的leetcode24. 两两交换链表中的节点(思路+解析)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 母乳喂养可以减肥是真的吗
- 下一篇: leetcode面试题 02.07. 链