PAT 反轉鏈表

給定一個常數 K 以及一個單鏈表 L,請編寫程序將 L 中每 K 個結點反轉。例如:給定 L 爲 1→2→3→4→5→6,K 爲 3,則輸出應該爲 3→2→1→6→5→4;若是 K 爲 4,則輸出應該爲 4→3→2→1→5→6,即最後不到 K 個元素不反轉。node

輸入格式:

每一個輸入包含 1 個測試用例。每一個測試用例第 1 行給出第 1 個結點的地址、結點總個數正整數 N(<=105) 、以及正整數 K (<=N),即要求反轉的子鏈結點的個數。結點的地址是 5 位非負整數,NULL 地址用 -1 表示。app

接下來有 N 行,每行格式爲:測試

Address Data Nextspa

其中 Address 是結點地址,Data 是該結點保存的整數數據,Next 是下一結點的地址。code

輸出格式:

對每一個測試用例,順序輸出反轉後的鏈表,其上每一個結點佔一行,格式與輸入相同。blog

輸入樣例:

00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

輸出樣例:

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
a,b,k=map(int,input().split())
c=[None for i in range(100001)]
for i in range(b):
    node=list(map(int,input().strip().split()))
    c[node[0]]=[node[1],node[2]]
d=[]
#找到全部有效結點加入list
while a!=-1:
   d.append([a,c[a][0]])
   a=c[a][1]
t=len(d)//k    #反轉次數
for i in range(t):
    s=d[i*k:k+i*k]
    s.reverse()
    d[i*k:i*k+k]=s
for i in range(len(d)):
    if i == len(d)-1:
        print('%05d'%d[i][0],d[i][1],-1)
    else:
        print('%05d'%d[i][0],d[i][1],'%05d'%d[i+1][0])

這道題最大的坑就是給出的結點不必定都是有效結點ip

相關文章
相關標籤/搜索