7-2-Reversing Linked List-编程题
解题代码
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 1000000
typedef struct Node node;
struct Node {
int data;
int next;
}a[MaxSize];
int main()
{
int head, p, t, r, s, N, M, cnt, i, j, temp, thead, tdata, tnext, flag = 1, K = 0;
scanf("%d %d %d", &head, &N, &M);
for (i = 0; i < N; i++) {
scanf("%d %d %d", &thead, &tdata, &tnext);
a[thead].data = tdata;
a[thead].next = tnext;
}
p = head;
while (p != -1) {
K++;
p = a[p].next;
}
cnt = K / M;
if (K >= 2) {
p = head; t = p; r = t; s = a[t].next;
for (i = 0; i < cnt; i++) {
for (j = 0; j < M - 1; j++) {
temp = a[s].next;
a[s].next = r;
r = s;
s = temp;
}
if (flag) {
head = r;
flag = 0;
}
if (i) a[p].next = r;
if (i == cnt - 1 && K%M) a[t].next = s;
else if(i == cnt - 1 && K%M==0) a[t].next = -1;
p = t;
t = s;
r = t;
s = a[s].next;
}
}
flag = 1; p = head;
while(a[p].next!=-1){
if (flag) flag = 0;
else printf("\n");
printf("%05d %d %05d", p, a[p].data, a[p].next);
p = a[p].next;
}
if(!flag) printf("\n");
printf("%05d %d %d", p, a[p].data, a[p].next);
return 0;
}
测试结果
问题整理
1.注意不是所有node都在list上
2.注意每次cnt剪头怎么指
3.注意只有一个数的情况的输出。