題目:傳送門
給出一個鏈表,每 k 個節點一組進行翻轉,並返回翻轉後的鏈表。k 是一個正整數,它的值小於或等於鏈表的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。
說明:
- 你需要自行定義鏈表結構,將輸入的數據保存到你的鏈表中;
- 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換;
- 你的算法只能使用常數的額外空間。
輸入描述:
第一行輸入是鏈表的值
第二行輸入是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
輸入
1 2 3 4 5
2
輸出
2 1 4 3 5
代碼
class ListNode:
def __init__(self,x):
self.val = x
self.next = None
class Main:
def const(self,arr):
curr = ans = ListNode(-1)
for x in arr:
curr.next = ListNode(x)
curr = curr.next
return ans.next
def reverse(self,listnode,n):
ans = curr = ListNode(-1)
while listnode:
t = n
arr = []
while t >= 1 and listnode:
arr.append(listnode.val)
t -= 1
listnode = listnode.next
if t == 0:
curr.next = self.const(reversed(arr))
else:
curr.next = self.const(arr)#如果最後一組不夠n個,不需要反轉
tt = n #指針後移n位
while tt >= 1:
curr = curr.next
tt -= 1
ans = ans.next
while ans:
print(ans.val,end=' ')
ans = ans.next
if __name__ == '__main__':
arr = input()
n = input()
ln = Main().const(arr.split(' '))
Main().reverse(ln, int(n))
注意事項
- python讀取控制檯輸入:arr = input()獲取一行
- python不換行輸出:print(xxx,end=’ ')
- 其他的看代碼註釋