143 重排鍊錶 python

2021-10-22 23:48:16 字數 1634 閱讀 7612

給定乙個單鏈表 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,重新排列...