链表不一定可以用链表写,可以用数组存好所有数据。然后将关于位置的数组排好顺序,这样只需要移动数组的位置就行。
#include <iostream> #include <bits/stdc++.h> using namespace std; struct node { int data; int next; }; int main() { struct node s[100001]; int n, m; int add; cin >> add >> n >> m; int address[100001]; for(int i = 0; i < n; i++) { int num; cin >> num; cin >> s[num].data >> s[num].next; } int k = 0; while(add != -1) { address[k++] = add; add = s[add].next; } for(int i = 0; i < k / m; i++) { for(int j = 0; j < m / 2; j++) { swap(address[j + m * i], address[i * m + m - 1 - j]); } } for(int i = 0; i < k; i++) { if(i != k - 1) { printf("%05d %d %05d\n", address[i], s[address[i]].data, address[i + 1]); } else { printf("%05d %d -1\n", address[i], s[address[i]].data); } } return 0; }