PAT(Basic Level) Practice : 1075 链表元素分类 (25分)
1075 链表元素分类 (25分)
测试点5运行超时
用哈希映射存储每个节点的数据和next指针
代码
#include <iostream>
#include <vector>
#include <string>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;
#include<iomanip>
//精度
#include<cmath>
//round四舍五入取整
int address1[100000]={0};
int address2[100000]={0};
int main()
{
int first,n,k;
cin>>first>>n>>k;
vector<int> points;
for(int i=0;i<n;i++)
{
//point temp;
int a,d,n;
//cin>>a>>d>>n;
scanf("%d %d %d",&a,&d,&n);
address1[a]=d;
address2[a]=n;
points.push_back(a);
}
vector<int> res;
int index=first;
while(index!=-1)
{
if(address1[index]<0)
res.push_back(index);
index=address2[index];
}
index=first;
while(index!=-1)
{
if(address1[index]>=0&&address1[index]<=k)
res.push_back(index);
index=address2[index];
}
index=first;
while(index!=-1)
{
if(address1[index]>k)
res.push_back(index);
index=address2[index];
}
for(int i=0;i<res.size()-1;i++)
{
printf("%05d %d %05d\n",res[i],address1[res[i]],res[i+1]);
}
printf("%05d %d -1\n",res[res.size()-1],address1[res[res.size()-1]]);
return 0;
}