还应该考虑输入样例中有不在链表中的结点
正确代码:
#include<iostream>
#include<algorithm>
using namespace std;
struct Node{
int data, next;
}list[100000];
int main() {
int start, n, k, tmp, link[100000], ct = 0;
cin >> start >> n >> k;
for(int i = 0; i < n; i++){
cin >> tmp ;
cin >> list[tmp].data >> list[tmp].next;
}
while(start != -1) {
link[ct++] = start;
// 使用ct变量记录链表中的结点的个数
start = list[start].next;
}
for(int i = 0; i < ct / k; i++)
// 这里使用的是ct变量做 “循环控制条件 ”,而不是写成 i < n / k;
reverse(link + i * k, link + (i + 1) * k);
for(int i = 0; i < ct - 1; i++)
// 这里使用的是ct变量做 “循环控制条件 ”,而不是写成 i < n - 1;
printf("%05d %d %05d\n", link[i], list[link[i]].data, link[i+1]);
printf("%05d %d -1", link[ct - 1], list[link[ct - 1]].data);
return 0;
}