这道题犹豫了很久,一直没做,今天终于做完了。
思路:
1.将数字存入origin。
2.首先先把题目给的数组按照正确的顺序排好,放入final。
3.按要求反转链表。
#include<bits/stdc++.h>
using namespace std;
typedef struct{
int address;
int data;
int next;
}node;
node origin[100001],final[100001];
int main()
{
int addr,n,k;
cin>>addr>>n>>k;
for(int i=1;i<=n;i++) //输入origin中的元素
{
node temp;
cin>>temp.address>>temp.data>>temp.next;
origin[temp.address]=temp;
}
for(int i=1;i<=n;i++) //将origin中的元素按顺序排至final中
{
final[i]=origin[addr];
addr=final[i].next;
if(final[i].next==-1)
{
break;
}
}
for(int i=1;i<=n/k;i++) //反转链表
{
for(int j=1;j<=k/2;j++)
{
node temp;
temp=final[i*k-j+1];
final[i*k-j+1]=final[(i-1)*k+j];
final[(i-1)*k+j]=temp;
}
}
for (int i=1;i<=n;i++) //输出
{
if(i!=n)
{
final[i].next=final[i+1].address;
printf("%05d %d %05d\n",final[i].address,final[i].data,final[i].next);
}
else
{
final[i].next=-1;
printf("%05d %d %d",final[i].address,final[i].data,final[i].next);
}
}
}
检测点6有坑!!!
可能存在无法连接进去的结点,它没说每个节点都是有效的。
在第26行加入n=i,统计有效节点的个数。
#include<bits/stdc++.h>
using namespace std;
typedef struct{
int address;
int data;
int next;
}node;
node origin[100001],final[100001];
int main()
{
int addr,n,k;
cin>>addr>>n>>k;
for(int i=1;i<=n;i++) //输入origin中的元素
{
node temp;
cin>>temp.address>>temp.data>>temp.next;
origin[temp.address]=temp;
}
for(int i=1;i<=n;i++) //将origin中的元素按顺序排至final中
{
final[i]=origin[addr];
addr=final[i].next;
if(final[i].next==-1)
{
n=i;
break;
}
}
for(int i=1;i<=n/k;i++) //反转链表
{
for(int j=1;j<=k/2;j++)
{
node temp;
temp=final[i*k-j+1];
final[i*k-j+1]=final[(i-1)*k+j];
final[(i-1)*k+j]=temp;
}
}
for (int i=1;i<=n;i++) //输出
{
if(i!=n)
{
final[i].next=final[i+1].address;
printf("%05d %d %05d\n",final[i].address,final[i].data,final[i].next);
}
else
{
final[i].next=-1;
printf("%05d %d %d",final[i].address,final[i].data,final[i].next);
}
}
}
终于好了,做了一个多小时。。。。。