給出乙個鍊錶,每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 ...