Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6.
Input Specification:
Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤105) which is the total number of nodes, and a positive K (≤N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.
Then N lines follow, each describes a node in the format:
Address Data Next
where Address
is the position of the node, Data
is an integer, and Next
is the position of the next node.
Output Specification:
For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.
Sample Input:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
Sample Output:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
#include<stdlib.h> #include<stdio.h> typedef int Elemetype; typedef struct node { Elemetype head; Elemetype data; Elemetype end; }Node; int main() { int start, number, k; scanf("%d %d %d", &start, &number, &k); Node *a=(Node *)malloc(sizeof(Node)*100000); for (int i = 0; i < number; i++) { int s, d, e; scanf("%d %d %d", &s, &d, &e); a[s].data = d; a[s].end = e; a[s].head = 0; } Node *b = (Node *)malloc(sizeof(Node)*number); int i=0; int m=start; for (m = start; a[m].end != -1; i++) { b[i].head = m; b[i].data = a[m].data; b[i].end = a[m].end; m = a[m].end; } b[i].head = m; b[i].data = a[m].data; b[i].end = a[m].end; int S = 0, E = k; while (i >= E-1) { for (int z = E-1; z >=S; z--) { if (z != S) { printf("%05d %d %05d\n", b[z].head, b[z].data, b[z - 1].head); } else { if (E + k - 1 <= i) { printf("%05d %d %05d\n", b[z].head, b[z].data, b[E+k - 1].head); } else { if (b[E - 1].end == -1) { printf("%05d %d %d\n", b[z].head, b[z].data, b[E - 1].end); } else { printf("%05d %d %05d\n", b[z].head, b[z].data, b[E - 1].end); } } } } S = E; E = E + k; } int j = S; for (; j <i; j++) { printf("%05d %d %05d\n", b[j].head, b[j].data, b[j].end); } if (j == i) { printf("%05d %d %d\n", b[i].head, b[i].data, b[i].end); } system("pause"); return 0; }