首页 > 代码库 > 【PAT】2-1 Reversing Linked List

【PAT】2-1 Reversing Linked List

题目地址:2-1

按给定的K个间隔翻转链表。给出了链表的首地址和结点个数以及间隔K,每个结点又提供了自身的地址、存储的数值以及下一个结点的地址。结点构造成一个结构体,所有结点放在结构体数组里,其中注意存储的技巧——将地址作为数组的数值下标,而数组值是数据内容以及下一个节点的地址。同时注意存在无效的结点。

手残感觉输出的时候好麻烦。

#include <iostream>#include <algorithm>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <ctime>using namespace std;#define read() freopen("in.txt", "r", stdin)#define write() freopen("out.txt", "w", stdout)#define rep( i , a , b ) for ( int i = ( a ) ; i <  ( b ) ; ++ i )  #define For( i , a , b ) for ( int i = ( a ) ; i <= ( b ) ; ++ i ) #define clr( a , x ) memset ( a , x , sizeof a )  #define cpy( a , x ) memcpy ( a , x , sizeof a ) #define max(a,b) (a>b)?(a):(b)#define LL long long #define MaxSize 100004typedef struct node{	int addr;	int data;	int next;}Node;Node nod[MaxSize];Node rev[MaxSize];int main(){	read();	int start,n,k,rest,gap,i,j;	while(scanf("%d %d %d",&start,&n,&k)!=EOF)	{		//按照题目要求输入每个结点的地址,数据以及下一个结点的地址		//将地址作为数组的数值下标,而数组值是数据内容以及下一个节点地址		int i = 0, j = 0;		while(n--)		{			scanf("%d",&i);			nod[i].addr = i;			int a,b;			scanf("%d",&a);			nod[i].data = http://www.mamicode.com/a;"%d",&b);			nod[i].next = b;		}		//构造单链表	    for (int i = start;;)	    {		    rev[j].addr = nod[i].addr;		    rev[j].data = http://www.mamicode.com/nod[i].data;"%05d %d %05d\n",rev[j].addr, rev[j].data,rev[j-1].addr);	    	}	    	printf("%05d %d ",rev[j].addr,rev[j].data );	    	if (rest == 0)	    	{	    		if (i == gap - 1)	    		{	    			printf("-1");	    		}else	    		{	    			printf("%05d",rev[(i+2)*k-1].addr );	    		}	    	}else	    	{	    		if (i == gap - 1)	    		{	    			printf("%05d",rev[(i+1)*k].addr );	    		}else	    		{	    			printf("%05d",rev[(i+2)*k-1].addr );	    		}	    	}	    	printf("\n");	    }	    if (rest != 0)	    {	    	for (i = gap*k; i < n - 1; ++i)	    	{	    		printf("%05d %d %05d\n",rev[i].addr,rev[i].data,rev[i+1].addr );	    	}	    	printf("%05d %d -1\n",rev[i].addr,rev[i].data );	    }	}    return 0;   }

  

  

【PAT】2-1 Reversing Linked List