思路:利用二维数组存储其数据及下一个结点的值,并且单独开一个数组用于翻转,由于数组较大,这是典型的牺牲空间换时间,利用数组的下标能够很容易找到其下一个值。
具体翻转是使用了<algorithm>头文件下的reverse函数 ,用于反转在[first,last)范围内的顺序
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first,BidirectionalIterator last);
#include<iostream>
#include<algorithm>
using namespace std;
int list[100010];
int node[100010][2];
int main()
{
int st, num, r;
cin >> st >> num >> r;
int address, data, next, i;
for (i = 0; i<num; i++)
{
cin >> address >> data >> next;
node[address][0] = data;
node[address][1] = next;
}
int m = 0, n = st;
while (n != -1)
{
list[m++] = n;
n = node[n][1];
}
i = 0;
while (i + r <= m)
{
reverse(list + i, list + i + r);
i = i + r;
}
for (i = 0; i < m - 1; i++)
{
printf("%05d %d %05d\n", list[i], node[list[i]][0], list[i + 1]);
}
printf("%05d %d -1\n", list[i], node[list[i]][0]);
}