L2-002 链表去重

原题链接

题解

把不需要删的放一边,需要删的放一边,大模拟题,注意结尾特判(为什么?想象极限条件)

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;
}

posted @ 2024-04-18 16:17  纯粹的  阅读(17)  评论(0)    收藏  举报