AcWing 4273. 链表合并 (链表)
PTA真的老喜欢出这种链表题欸
也好,涨知识了哦呦
e存储当前地址的值
ne存储当前节点地址的下一个地址
#include<bits/stdc++.h>
using namespace std;
const int N=200200;
int e[N],ne[N];
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
int f1,f2,n;
cin>>f1>>f2>>n;
for(int i=1;i<=n;i++)
{
int address;
cin>>address;
cin>>e[address]>>ne[address];//当前地址的存储值,当前地址的下一个地址
}
//存储地址就好了,不用存储数据,不好逆推
vector<int> a,b;
for(int i=f1;i!=-1;i=ne[i])
{
a.push_back(i);
}
for(int i=f2;i!=-1;i=ne[i])
{
b.push_back(i);
}
if(a.size()<b.size()) swap(a,b);
reverse(b.begin(),b.end());
vector<int> v;
for(int i=0,j=0;i<a.size(); )
{ //2个a 1个b依次插入数据
v.push_back(a[i++]);//插入一个链表a的结点
if(i%2==0&&j<b.size()) v.push_back(b[j++]);//插入一个链表b的结点
}
for(int i=0;i<v.size();i++)
{
printf("%05d %d ",v[i],e[v[i]]);
if(i==v.size()-1) printf("-1\n");
else printf("%05d\n",v[i+1]);
}
return 0;
}