問題描述
給定乙個常數 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 個元素不反轉。
輸入格式
每個輸入包含 1 個測試用例。每個測試用例第 1 行給出第 1 個結點的位址、結點總個數正整數 n (≤1
05
)(≤10^5)
(≤105)
、以及正整數 k (≤n),即要求反轉的子鏈結點的個數。結點的位址是 5 位非負整數,null 位址用 −1 表示。
接下來有 n 行,每行格式為:
address data next
其中 address 是結點位址,data 是該結點儲存的整數資料,next 是下一結點的位址。
輸出格式
對每個測試用例,順序輸出反轉後的鍊錶,其上每個結點佔一行,格式與輸入相同。
樣例輸入
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
c++**
#include
using
namespace std;
// 定義node節點:address、data、nexta
struct node
;// 將前乙個陣列中的node節點按位址次序排列存入後乙個陣列,first為首位址,n為鍊錶長度
void
storelist
(node node[
100000
],node list[
100000],
int first,
int n)
k++;}
t = list[i]
.next;}}
// 將排好序的陣列按照題目要求進行反轉
intreverselist
(node list[
100000],
int n,
int k)
list[start]
.next = list[start+k]
.addr;
start +
= k;
}int first = list[k-1]
.addr;
return first;
}int
main()
storelist
(node,list,first,n)
; first =
reverselist
(list,n,k)
;storelist
(list,finallist,first,n)
;for
(int i=
0;i1;i++
)printf
("%.5d %d -1\n"
,finallist[n-1]
.addr,finallist[n-1]
.data)
;return0;
}
備註
部分正確……
PAT 乙級 1025 反轉鍊錶
給定乙個常數 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 個元素不反轉。每個輸入包含 1 個測試用例。每個測試用例...
PAT 乙級 1025 鍊錶反轉
給定乙個常數 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 個元素不反轉。每個輸入包含 1 個測試用例。每個測試用例...
PAT乙級1025反轉鍊錶
給定乙個常數 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 個元素不反轉。輸入格式 每個輸入包含 1 個測試用例。每...