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;
}
posted @ 2022-07-30 10:51  Vijurria  阅读(18)  评论(1编辑  收藏  举报