11、鏈表區間逆序
Description
將單個鏈表的每K個節點之間逆序,打印出新鏈表;最後不足K的節點數不需要逆序;要求時間複雜度爲O(n),額外空間複雜度爲O(1)。
Input
輸入的每一行的值用空格隔開,第一個表示鏈表長度,中間爲節點值,最後代表K。
Output
輸出的每一行爲新的鏈表,節點值用空格隔開,末尾不要空格。
Sample Input 1
8 1 2 3 4 5 6 7 8 3
8 a b c d e f g h 4
Sample Output 1
3 2 1 6 5 4 7 8
d c b a h g f e
import sys
import math
class ListNI:
def SetK(self,arr):
m=len(arr)
for i in range(m):
s=arr[i][0]
d=len(arr[i])
last=int(arr[i][d-1])
time=math.floor(int(s)/last)
del arr[i][0]
del arr[i][d-1-1]
vg = 0
vn = 0
while time>0:
for j in range(vn,int(last/2)):
temp = arr[i][last-j- 1+vg]
arr[i][last - j - 1+vg] = arr[i][j+vg]
arr[i][j+vg] = temp
vg=vg+last
time-=1
print(" ".join(arr[i]))
if'_main_':
cldd=ListNI()
A=[]
for line in sys.stdin:
te = line.split()
A.append(te)
cldd.SetK(A)