力扣(LeetCode) -143 重排連結串列
本題考察的是快慢指標和一些連結串列插入刪除等操作
題目描述
給定一個單連結串列 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.
題目思考
我們首先使用快慢指標找到連結串列中間的結點,然後把中間結點和他的後驅(.next)斷開,形成兩個前半截和後半截連結串列。我們把後半截連結串列反轉,然後把後半截連結串列的結點依次插入到前半截連結串列中即可。如下圖所示。
程式碼
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void reorderList(ListNode head) {
if(head==null||head.next==null)
return ;
ListNode res=head;
ListNode fast=head;
ListNode slow=head;
while(fast.next!=null&&fast.next.next!=null){ //使用快慢指標找到中間結點
fast=fast.next.next;
slow=slow.next;
}
ListNode pre=null,cur=slow.next; //截成兩個連結串列
slow.next=null;
while(cur!=null){ //反轉第二個連結串列
ListNode temp=cur.next;
cur.next=pre;
pre=cur;
cur=temp;
}
while(pre!=null){ //將第二個連結串列的結點依次插入第一個連結串列
ListNode temp1=res.next;
ListNode temp2=pre.next;
res.next=pre;
pre.next=temp1;
res=temp1;
pre=temp2;
}
}
}
相關文章
- LeetCode-143-重排連結串列LeetCode
- 143. 重排連結串列
- leetcode刷題.143. 重排連結串列.每日打卡LeetCode
- LeetCode 143 重排連結串列 HERODING的LeetCode之路LeetCode
- 力扣 leetcode 86. 分隔連結串列力扣LeetCode
- 力扣--連結串列演算法力扣演算法
- Go資料結構與力扣—連結串列Go資料結構力扣
- 力扣-203. 移除連結串列元素力扣
- TODO-力扣-707. 設計連結串列力扣
- [Golang]力扣LeetBook—初級演算法—連結串列—迴文連結串列(快慢指標)Golang力扣演算法指標
- 力扣 147. 對連結串列進行插入排序力扣排序
- 力扣學習筆記:142. 環形連結串列 II力扣筆記
- 力扣-83. 刪除排序連結串列中的重複元素力扣排序
- L2-022 重排連結串列
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- LeetCode-連結串列LeetCode
- L2-022 重排連結串列【陣列】陣列
- 力扣(LeetCode)863力扣LeetCode
- 力扣(LeetCode)389力扣LeetCode
- 力扣(LeetCode)796力扣LeetCode
- 力扣(LeetCode)934力扣LeetCode
- 力扣(LeetCode)543力扣LeetCode
- 力扣(LeetCode)513力扣LeetCode
- 力扣(LeetCode)965力扣LeetCode
- pta重排連結串列(一個很清晰的實現,完全模擬連結串列的實現)
- LeetCode連結串列專題LeetCode
- leetcode 反轉連結串列LeetCode
- LeetCode 86 ——分隔連結串列LeetCode
- 力扣(LeetCode)103力扣LeetCode
- 力扣(LeetCode)130力扣LeetCode
- [連結串列]leetcode138-複製帶隨即指標的連結串列LeetCode指標
- 【LeetCode連結串列#9】圖解:兩兩交換連結串列節點LeetCode圖解
- leetcode 92 反轉連結串列ⅡLeetCode
- LeetCode 86. 分隔連結串列LeetCode
- leetcode:21. 合併兩個有序連結串列(連結串列,簡單)LeetCode