小紅書 每K個一組反轉鍊錶(Python語言實現)

2021-09-26 19:07:38 字數 2268 閱讀 8049

給出乙個鍊錶,每k個節點一組進行翻轉,並返回翻轉後的鍊錶。

k是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是k的整數倍,那麼將最後剩餘節點保持原有順序。

說明:1.你需要自行定義鍊錶結構,將輸入的資料儲存到你的鍊錶中;

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

3.你的演算法只能使用常數的額外空間。

第一行輸入是鍊錶的值

第二行輸入是k的值,k是大於或等於1的整數

輸入形式為:

1 2 3 4 5

2

當k = 2時,應當輸出: 2 1 4 3 5

當k = 3時,應當輸出: 3 2 1 4 5

當k=6時,應當輸出: 1 2 3 4 5

輸入:

1 2 3 4 5

2輸出:

2 1 4 3 5

首先設立頭節點可以避免第一次旋轉時的特殊情況考慮,在旋轉過程中傳入兩個引數第乙個節點與最後乙個節點的下乙個給區域性旋轉函式,返回值分別為當前要旋轉的鍊錶的第乙個節點與最後乙個節點,這樣方便將當前部分與前乙個部分斷開的頭尾相連。

class

listnode

:def

__init__

(self, x)

: self.val = x

self.

next

=none

defvalue_to_list

(seq)

: head = p = listnode(

float

('inf'))

for su in seq:

q = listnode(su)

p.next

= q p = q

return head

deflist_to_value

(head)

: res =

p = head

while p:

str(p.val)

) p = p.

next

return

' '.join(res[1:

])defrotate_k_node_of_list

(head, k)

:if k ==1:

return head

left = head

while

true

: front, rear = left.

next

, left.

next

count =

0while rear and count < k:

rear = rear.

next

count +=

1if count == k:

one, two = rotate(front, rear)

left.

next

= one

left = two

else

:break

return head

defrotate

(front, rear)

: p, q = front, front

while q.

next

and q.

next

!= rear:

cur = q.

next

q.next

= cur.

next

cur.

next

= p p = cur

return p, q

if __name__ ==

'__main__'

: seq =

list

(map

(int

,input()

.strip(

).split())

) k =

int(

input()

.strip())

head = value_to_list(seq)

node = rotate_k_node_of_list(head, k)

res = list_to_value(node)

print

(res)

(最近更新:2023年09月02日)

程式設計題 每K個一組反轉鍊錶

反轉鍊錶的高階版。給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。public static listnode reverselist listnode head,int k ...

每k個一組反轉鍊錶 python版

給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。說明 你需要自行定義鍊錶結構,將輸入的資料儲存到你的鍊錶中 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換 你的演...

K個一組反轉鍊錶

描述 給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給你這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 ...