一、题目 二、源代码 #include<stdio.h> struct NODE { int data; int next; }; int main() { int first,n,k; int addr1,data1,addr2; int i,p,q,r,s,temp,flag=0; struct NODE t[100001]; scanf("%d %d %d",&first,&n,&k); for(i=0;i<n;i++) { scanf("%d %d %d",&addr1,&data1,&addr2); t[addr1].data=data1; t[addr1].next=addr2; } /*无语,一直提交都是24分,卡在最后一个检测点上,思来想去都没想到到底是漏了哪种情况。百度了下别人的代码,才发现输入的节点数不一定就是一条完整的链表,so~*/ r=first; for (i = 0; i < n; i++) { r = t[r].next; if (r == -1) { n = i + 1; break; } } s=p=r=first; while(n>=k) { q=t[p].next; for(i=0;i<k-1;i++) { temp=t[q].next; t[q].next=p; p=q; q=temp; } t[r].next=q; if(flag==0) { first=p; flag=1; } else { t[s].next=p; s=r; } r=p=q; n-=k; } r=first; while(t[r].next!=-1) { printf("%05d %d %05d\n",r,t[r].data,t[r].next); r=t[r].next; } printf("%05d %d -1\n",r,t[r].data); return 0; } 三、运行结果