#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <stack>
using namespace std;
#define N 100000
bool reverse(int &head, int &last, int key[], int next[], int k) {
if(head != -1) {
int i = 0;
last = head;
for(i = 1; i < k && last != -1; i ++) {
last = next[last];
}
if(last != -1) {
int nexthead = next[last];
int h = head;
int p = next[h];
next[head] = nexthead;
while(p != nexthead) {
int tmp = next[p];
next[p] = h;
h = p;
p = tmp;
}
swap(head, last);
return true;
}
}
return false;
}
int main(int argc, char **argv) {
int key[N] = {};
int next[N] = {};
int head, n, k;
cin >> head >> n >> k;
for(int i = 0; i < n; i ++) {
int ca, d, na;
scanf("%d%d%d", &ca, &d, &na);
key[ca] = d;
next[ca] = na;
}
int last;
if(reverse(head, last, key, next, k)) {
while(reverse(next[last], last, key, next, k)) ;
}
int node = head;
while(node != -1) {
if(next[node] != -1)
printf("%05d %d %05d\n", node, key[node], next[node]);
else
printf("%05d %d -1\n", node, key[node]);
node = next[node];
}
return 0;
}
1074. Reversing Linked List (25)
最新推荐文章于 2022-03-21 23:03:24 发布