給定乙個單鏈表 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.
根據題目的描述和給的示例可以看出,鍊錶重排後的形式為鍊錶的右半部分反轉後的結果中的元素依次插入鍊錶的左半部分。因此,解決該問題可以分為以下幾步進行
ac code
class
solution
:def
reorderlist
(self, head: listnode)
->
none
:"""
do not return anything, modify head in-place instead.
"""ifnot head:
return
none
# 獲取鍊錶長度
l =0 cur = head
while cur:
l +=
1 cur = cur.
next
mid = l //
2 cur = head
index =
0# 獲取左鍊錶
while cur and index < mid -1:
index +=
1 cur = cur.
next
# 獲取右鍊錶
t = cur.
next
cur.
next
=none
# 右鍊錶反轉
right =
none
while t:
node = listnode(t.val)
node.
next
= right
right = node
t = t.
next
l, r = head, right
while l.
next
and r:
node = listnode(r.val)
node.
next
= l.
next
l.next
= node
l = l.
next
.next
r = r.
next
if r:
l.next
= r
143 重排鍊錶
143.重排鍊錶 給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 ...
143 重排鍊錶
題解 時間複雜度 o n 空間複雜度 o n definition for singly linked list.struct listnode listnode int x val x next nullptr listnode int x,listnode next val x next nex...
143 重排鍊錶
題目 給定乙個單鏈表 l l0 l1 l n 1 ln 將其重新排列後變為 l0 l n l1 l n 1 l2 l n 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 5,重新排列...