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

浙公网安备 33010602011771号