LeetCode143 重排鍊錶

2022-09-04 03:00:07 字數 1213 閱讀 7362

給定乙個單鏈表 l:l0→l1→…→ln-1→ln ,

將其重新排列後變為: l0→ln→l1→ln-1→l2→ln-2→…

你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

可以遍歷然後存起來,然後空間換時間。

也可以遞迴,但是遞迴的方法需要巧妙一點。

這裡借用windliang的解法,每次往內遞迴,把head指向tail,tail指向內部處理完的鍊錶的第乙個節點。

求出節點數

9while (h != null

) 13

14reorderlisthelper(head, len);15}

1617

private listnode reorderlisthelper(listnode head, int

len)

23if (len == 2

) 28

//得到對應的尾節點,並且將頭結點和尾節點之間的鍊錶通過遞迴處理

29 listnode tail = reorderlisthelper(head.next, len - 2

);30 listnode subhead = head.next;//

中間鍊錶的頭結點

31 head.next =tail;

32 listnode outtail = tail.next; //

上一層 head 對應的 tail

39第三種方法就是先拆分鍊錶成兩半,然後把後半部分翻轉,然後兩個鍊錶合併。

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