L2-002 連結串列去重

纯粹的發表於2024-04-18

原題連結

題解

把不需要刪的放一邊,需要刪的放一邊,大模擬題,注意結尾特判(為什麼?想象極限條件)

code

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int val,next;
}chain[100005];
int vis[100005]={0};
int main()
{
    int start,n;
    cin>>start>>n;

    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x>>chain[x].val>>chain[x].next;
    }

    vector<int> a,b;
    int it=start;
    for(int it=start;it!=-1;it=chain[it].next)
    {
        int now=abs(chain[it].val);
        if(vis[now]) b.push_back(it);
        else a.push_back(it);
        vis[now]=1;
    }
    int lena=a.size(),lenb=b.size();
    for(int i=0;i<lena-1;i++) printf("%05d %d %05d\n",a[i],chain[a[i]].val,a[i+1]);
    if(lena)printf("%05d %d -1\n",a[lena-1],chain[a[lena-1]].val);

    for(int i=0;i<lenb-1;i++) printf("%05d %d %05d\n",b[i],chain[b[i]].val,b[i+1]);
    if(lenb) printf("%05d %d -1\n",b[lenb-1],chain[b[lenb-1]].val);//特判,防止陣列-1查詢
    return 0;
}

相關文章