#include<iostream>
#include<cstdio>
#include<vector>
#include<string>
using namespace std;
struct node
{
int add;//当前地址
int data;//数据
int next;//下一个的地址
};
int main ()
{
int a,n,k;
cin>>a>>n>>k;
vector <node> s(100000);//建立一个存放node类型数据的容器 组
vector <node> ss;// 建立一个存放node类型数据的容器 ,存放原本的链表
vector <node> re;//建立一个存放node类型数据的容器 ,存放反转后的链表
node tmp;//临时node类型变量
for(int i=0;i<n;i++)
{
scanf("%d %d %d",&tmp.add,&tmp.data,&tmp.next );
s[tmp.add]=tmp;
}
int nextadd=a;//起始地址
if(nextadd==-1)
{
printf("-1\n");
}
else
{
while(nextadd!=-1)
{
ss.push_back(s[nextadd]);//向原数组尾部插入一个node,其中,当前地址就是数组s的下标
nextadd=s[nextadd].next ;
}
int l=ss.size();
int temp=k-1;
while(temp<l)
{
for(int i=temp;i>temp-k;i--)//每k个反转一次
{
re.push_back(ss[i]);//从后向前将原来的node插入反转后的re容器中
}
temp=temp+k;
}
for(int i=temp-k+1;i<l;i++)//将剩余的插入re
re.push_back(ss[i]);
for(int i=0;i<l-1;i++)//将re进行链接
{
re[i].next=re[i+1].add;
printf("%05d %d %05d\n",re[i].add,re[i].data,re[i].next);
}
printf("%05d %d -1\n",re[l-1].add,re[l-1].data);//最后一个输出-1
}
return 0;
}
1025 反转链表
最新推荐文章于 2024-09-23 01:00:00 发布