11.鏈表區間逆序

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章