第一次提交
第二次
今日积累:while(n--){} n结束的值是-1而不是0 (꒪⌓꒪)
code
# include <iostream>
struct Node {
int data;
int p_nxt;
} L[100000];
int main(void)
{
int p_start; // first node address
int K;
int N; //不保真,待会要顺着链表再查一次
// 输入数据
std::cin >> p_start >> N >> K;
while (N--)
{
int a, b, c;
std::cin >> a >> b >> c;
L[a] = Node{ b, c };
}
// 检查数据
N = 0;
for (int p = p_start; p != -1; p = L[p].p_nxt) ++N;
// 反转
int nxt_p = L[p_start].p_nxt, nxt_pp = L[nxt_p].p_nxt; // 修改指针之前的备份
int * lasthead[10000];
int front = 0, rare = 0;
lasthead[++rare] = &p_start;
for (int i = 0, p = p_start; p != -1; ++i)
{
if ((i + 1) % K == 0 || i % K == 0 && i+K>N)
{
*lasthead[++front] = p;
if (i % K == 0 && i + K > N) break;
}
else
{
L[nxt_p].p_nxt = p; // 反转
}
if (i % K == 0) lasthead[++rare] = &L[p].p_nxt;
p = nxt_p;
nxt_p = nxt_pp;
nxt_pp = L[nxt_pp].p_nxt;
}
if (front != rare) *lasthead[++front] = -1;
// 输出
for (int p = p_start; p != -1; p = L[p].p_nxt)
{
if (L[p].p_nxt != -1) printf("%05d %d %05d\n", p, L[p].data, L[p].p_nxt);
else printf("%05d %d -1\n", p, L[p].data);
}
return 0;
}