如果 单纯从做题角度来讲,上一个做法当然没问题,可是目的是为了练习静态链表,so还是不要投机取巧了,静态链表解法如下:
#include <stdio.h>
struct data
{
int n;
int next;
} ss[100000];
int find(int first);
int reverse(int first,int sum,int k);
void print(int first);
int main()
{
int i,j;
int first,sum,k;
scanf("%d%d%d",&first,&sum,&k);
for(i=0;i<sum;i++)
{
scanf("%d",&j);
scanf("%d%d",&ss[j].n,&ss[j].next);
}
sum=find(first);
if(k>1)
{
first=reverse(first,sum,k);
}
print(first);
return 0;
}
int find(int first)
{
int i=1;
while(ss[first].next!=-1)
{
first=ss[first].next;
i++;
}
return i;
}
int reverse(int first,int sum,int k)//只解释这个主要函数。
{
int i;
int head;
int p1,p2,p3;//p1,p2,p3轮替使指针移位,并且交换指针。
int firstend=first;//记录上一次的末尾,以便跟这一次的头相连。
for(i=0;i<sum/k;i++)
{
int key=k;
key--;
p2&#