Reversing Linked List (25)

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
	int curadd;
	int data;
	int nextadd;
}Node;
int main()
{
	int n,k,firstadd,i,num,j;
	Node *a,temp;
	int c;
	while(scanf("%d%d%d",&firstadd,&n,&k)!=EOF)
	{
		a=(Node *)malloc(n*sizeof(Node));
		for(i=0;i<n;i++)
			scanf("%d%d%d",&a[i].curadd,&a[i].data,&a[i].nextadd);
		num=0;
		while(firstadd!=-1)
		{
			j=num;
			while(a[j].curadd!=firstadd)
				j++;
			firstadd=a[j].nextadd;
			temp=a[num];
			a[num]=a[j];
			a[j]=temp;
			num++;
		}
		if(k>num)
		{
			for(i=0;i<num-1;i++)
				printf("%05d %d %05d\n",a[i].curadd,a[i].data,a[i+1].curadd);
			printf("%05d %d -1\n",a[i].curadd,a[i].data);
		}
		else if(k==num)
		{
			for(i=num-1;i>0;i--)
				printf("%05d %d %05d\n",a[i].curadd,a[i].data,a[i-1].curadd);
			printf("%05d %d -1\n",a[0].curadd,a[0].data);
		}
		else
		{
			c=num/k;
			for(i=0;i<c;i++)
			{
				for(j=0;j<k/2;j++)
				{
					temp=a[k*i+j];
					a[k*i+j]=a[k*i+k-j-1];
					a[k*i+k-j-1]=temp;
				}
			}
			for(i=0;i<num-1;i++)
				printf("%05d %d %05d\n",a[i].curadd,a[i].data,a[i+1].curadd);
			printf("%05d %d -1\n",a[i].curadd,a[i].data);
		}
	}
	return 0;
}

这道题目让我再一次鄙视自己,首先是对题目的意思不能完全理解!想了好多弯路。看了网上的解题报告理解了题目的意思再动手写代码。结果测试还是有一个测试点不能通过。由于害怕对题目没有完全理解,怕自己找不出错误,结果把问题摆在群里,浙大考研群的同学通过测试帮我把问题找出来了。还有个浙大高手直接把我代码的小问题找出来了。再一次鄙视自己!自己写的代码本来就乱糟糟,自己能理解清楚都费力。真心感谢帮助我的人!!!


posted on 2015-01-25 22:59  赛亚人  阅读(176)  评论(0编辑  收藏  举报