給定乙個單鏈表 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.
方法:思想是設定兩個節點,pre初始化為head,cur =pre。更新後pre節點是已經排好的節點位置,cur節點是倒數第二個節點。每次更新後,pre前進兩個位置。
(1)首先判斷鍊錶是空或者是只有乙個節點,直接返回;
(2)然後計算鍊錶的長度n;
(3)第一次迴圈,pre在head處,而head是不需要排序的,cur更新直到倒數第二個節點,所以迴圈次數是n-2次。然後穿針引線。
(4)需要注意的是需要判斷k值是否大於等於1。n為大於等於2.
class
solution
while
(n>=2)
listnode* temp = cur-
>next;
temp-
>next = pre-
>next;
pre-
>next = temp;
cur-
>next =
null
; pre = temp-
>next;
} n = n-2;
}}};
Leetcode 143 重排鍊錶
給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。解題思路 前一半 0,size 1 2 的結點位址進入佇列,先進先出,後一半 size 1 2,size 的結點入棧,...
LeetCode 143 重排鍊錶
給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。解題思路 首先想到的是找到要插入的元素,壓入堆疊,彈出時剛好為期望的順序,然後插入對應位置。再換一種思路,找到待插入節...
leetcode143 重排鍊錶
給定乙個單鏈表 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...