pta的一个题目1025 反转链表
在pta上通过了
在自己的编译器输入不了
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int address;
int data;
int next;
}Node;
int main()
{
int i, j, addr, n, k;
scanf("%d %d %d", &addr, &n, &k);
Node origin[100000], sort[100000], temp;
for(i=0; i<n; i++){
scanf("%d %d %d", &temp.address, &temp.data, &temp.next);
origin[temp.address]=temp;
}
for(i=0; i<n; i++){
sort[i]=origin[addr];
addr=sort[i].next;
if(addr==-1){
n=i+1;
break;
}
}
for(i=0; i<n/k; i++){
for(j=0; j<k/2; j++){
temp=sort[j+i*k];
sort[j+i*k]=sort[k-j-1+i*k];
sort[k-j-1+i*k]=temp;
}
}
for(i=0; i<n; i++){
if(i!=n-1){
sort[i].next=sort[i+1].address;
printf("%05d %d %05d\n", sort[i].address, sort[i].data, sort[i].next);
}
else{
sort[i].next=-1;
printf("%05d %d %d\n", sort[i].address, sort[i].data, sort[i].next);
}
}
}
Node origin[100000], sort[100000]; 这两个数组定义太大了,把它们挪到main()函数外面,定义成全局变量。
#include<stdio.h>
#include<stdlib.h>
typedef struct {
int address;
int data;
int next;
}Node;
Node origin[100000], sort[100000];
int main()
{
int i, j, addr, n, k;
scanf("%d %d %d", &addr, &n, &k);
Node temp;
for (i = 0; i < n; i++) {
scanf("%d %d %d", &temp.address, &temp.data, &temp.next);
origin[temp.address] = temp;
}
for (i = 0; i < n; i++) {
sort[i] = origin[addr];
addr = sort[i].next;
if (addr == -1) {
n = i + 1;
break;
}
}
for (i = 0; i < n / k; i++) {
for (j = 0; j < k / 2; j++) {
temp = sort[j + i * k];
sort[j + i * k] = sort[k - j - 1 + i * k];
sort[k - j - 1 + i * k] = temp;
}
}
for (i = 0; i < n; i++) {
if (i != n - 1) {
sort[i].next = sort[i + 1].address;
printf("%05d %d %05d\n", sort[i].address, sort[i].data, sort[i].next);
}
else {
sort[i].next = -1;
printf("%05d %d %d\n", sort[i].address, sort[i].data, sort[i].next);
}
}
}
运行成功了?输入不了?这个不科学吧。。。。
两个数组就200k * 12 = 2M不到的空间,不可能因为这个。。。
除非你的系统有什么限制条件。。。