Leetcode143 重排鍊錶

2021-10-04 13:17:23 字數 1246 閱讀 1872

reorder list

given a singly linked list l: l0→l1→…→ln-

1→ln,

reorder it to: l0→ln→l1→ln-

1→l2→ln-

2→…you may not modify the values in the list's nodes, only nodes itself

may be changed.

example 1

:given 1

->2-

>3-

>

4, reorder it to 1

->4-

>2-

>

3.example 2

:given 1

->2-

>3-

>4-

>

5, reorder it to 1

->5-

>2-

>4-

>

3.

快慢指標確認中點 + 翻轉插入鍊錶 

這道題可作如下轉化:

步驟一: 找到鍊錶中點後分割其為 left 鍊錶、right 鍊錶兩部分;

步驟二: 翻轉 right 鍊錶, 翻轉鍊錶思路同 206.reverse_linked_list;

步驟三: 接著從 left 鍊錶的左側, 翻轉後的 right 鍊錶的左側各取乙個值進行交替拼接

快慢指標即 quick 指標每次走兩步, slow 指標每次走一步, 同 148.sort_list

void

reorderlist

(listnode* head)

//後端反轉

listnode *needreverser = slow-

>next;

slow-

>next =

null

; needreverser =

reverse

(needreverser)

;//插入前端縫隙

listnode *cur = head;

while

(cur && needreverser)

}

listnode *

reverse

(listnode *head)

return p1;

}

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...