这个思路是真的好,比别人的思路都好太多了,用一个l
索引和r
索引,一个arr1
数组和arr2
数组,巧妙地化解了这个问题。
因为它一开始也不是好的链表,所以arr1
就是先排好一个好的链表
arr2
才是后来的结果的链表。
#include <iostream>
using namespace std;
typedef struct Node{
int a;
int nt;
}Node;
int main(){
Node p[100001];
int ad,n,address,m,next,cnt,l,r,x;
int arr1[100001],arr2[100001];
scanf("%d%d",&ad,&n);
while(n--){//根据地址进行
scanf("%d%d%d",&address,&m,&next);
p[address].a = m;
p[address].nt = next;
}
cnt = 0;
while(ad != -1){
arr1[cnt++] = ad;//将地址重新进行排列
ad = p[ad].nt;
}
x = 0,l = 0,r = cnt - 1;
while(l <= r){
if(l == r)
arr2[x++] = arr1[l++];
else{
arr2[x++] = arr1[r--];
arr2[x++] = arr1[l++];
}
}
for(int i = 0;i < (x - 1);i++)
printf("%05d %d %05d\n",arr2[i],p[arr2[i]].a,arr2[i+1]);
printf("%05d %d -1\n",arr2[x-1],p[arr2[x-1]].a);
return 0;
}