LeetCode 143 重排連結串列 HERODING的LeetCode之路
給定一個單連結串列 L:L0→L1→…→Ln-1→Ln ,
將其重新排列後變為: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
示例 1:
給定連結串列 1->2->3->4, 重新排列為 1->4->2->3.
示例 2:
給定連結串列 1->2->3->4->5, 重新排列為 1->5->2->4->3.
解題思路:
一個耗時長耗存多的方法,但是特別容易理解,遞迴!1->2->3->4,首先1指向4,並且斷掉3指向4的指標,然後4再指回1的next,就是2,這個時候再在2->3的集合中遍歷,由於連結串列長度短於3的連結串列直接返回即可,所以return,程式碼如下:
/**
* 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:
void reorderList(ListNode* head) {
exchange(head);
}
void exchange(ListNode * node){
// 計算長度,如果長度小於等於2,說明到最中間了,返回
int len = 0;
ListNode * temp = node;
while(temp != nullptr){
temp = temp -> next;
len ++;
if(len > 2){
break;
}
}
if(len <= 2){
return;
}
// 雙指標一個用於遍歷,一個用於指向下一個節點
ListNode * temp1 = node -> next;
ListNode * temp2 = node;
//一直遍歷到倒數第二個指標
while(temp2 -> next -> next != nullptr){
temp2 = temp2 -> next;
}
ListNode * temp3 = temp2;
ListNode * temp4 = temp2 -> next;
// 斷開與最後一個節點的連線
temp3 -> next = nullptr;
node -> next = temp4;
temp4 -> next = temp1;
// 進行下一次交換
exchange(temp4 -> next);
}
};
/*作者:heroding
連結:https://leetcode-cn.com/problems/reorder-list/solution/fei-chang-rong-yi-li-jie-de-si-lu-by-heroding/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。*/
相關文章
- LeetCode-143-重排連結串列LeetCode
- 力扣(LeetCode) -143 重排連結串列力扣LeetCode
- leetcode刷題.143. 重排連結串列.每日打卡LeetCode
- 143. 重排連結串列
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- LeetCode 164 最大間距 HERODING的LeetCode之路LeetCode
- LeetCode 402 移掉K位數字 HERODING的LeetCode之路LeetCode
- LeetCode-連結串列LeetCode
- LeetCode 188 買賣股票的最佳時機IV HERODING的LeetCode之路LeetCode
- Leetcode_86_分割連結串列_連結串列LeetCode
- 重排連結串列
- LeetCode 86 ——分隔連結串列LeetCode
- LeetCode連結串列專題LeetCode
- leetcode 反轉連結串列LeetCode
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- leetcode 92 反轉連結串列ⅡLeetCode
- LeetCode 86. 分隔連結串列LeetCode
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- leetcode題目解析(js)--連結串列LeetCodeJS
- 【Leetcode】61.旋轉連結串列LeetCode
- leetcode206. 反轉連結串列LeetCode
- leetcode 206.反轉連結串列LeetCode
- LeetCode 234. 迴文連結串列LeetCode
- [leetcode 92] 反轉連結串列 IILeetCode
- leetcode 206. 反轉連結串列LeetCode
- 每日leetcode——160. 相交連結串列LeetCode
- LeetCode入門指南 之 連結串列LeetCode
- [連結串列]leetcode138-複製帶隨即指標的連結串列LeetCode指標
- 2024/12/2【連結串列】LeetCode 142 環形連結串列 II 【X】LeetCode
- [連結串列]leetcode1019-連結串列中的下一個更大節點LeetCode
- leetcode 61 旋轉連結串列 c++LeetCodeC++
- 【LeetCode】初級演算法:連結串列LeetCode演算法
- leetcode 234.迴文連結串列 JavaLeetCodeJava
- LeetCode-Python-(206)反轉連結串列LeetCodePython
- Leetcode-142. 環形連結串列 IILeetCode
- LeetCode-142-環形連結串列 IILeetCode
- LeetCode-092-反轉連結串列 IILeetCode
- 力扣 leetcode 86. 分隔連結串列力扣LeetCode