L2-002 链表去重
【解析】用结构体数组来对其进行模拟
#include<bits/stdc++.h>
using namespace std;
//结构体存储节点信息
struct Node{int id;int num;int neid;
}rect[100010],rest[100010];
bool vis[100010];
int main(){int x,n;cin>>x>>n;//输入for(int i=0;i<n;i++){Node node;cin>>node.id>>node.num>>node.neid; rect[node.id]=node; }//对链表进行去重int t=x,y=-1,k1,k2;while(t!=-1){//绝对值标记if(!vis[abs(rect[t].num)]){ vis[abs(rect[t].num)]=true;if(t!=x)rect[k1].neid=t;k1=t;t=rect[t].neid;rect[k1].neid=-1;}else{if(y==-1)y=rect[t].id;elserest[k2].neid=t;rest[rect[t].id]=rect[t];k2=t;t=rest[t].neid;rest[k2].neid=-1; }}//输出while(x!=-1){printf("%05d %d",rect[x].id,rect[x].num);if(rect[x].neid!=-1)printf(" %05d",rect[x].neid);else printf(" -1");cout<<endl;x=rect[x].neid;}while(y!=-1){printf("%05d %d",rest[y].id,rest[y].num);if(rest[y].neid!=-1)printf(" %05d",rest[y].neid);else printf(" -1");cout<<endl;y=rest[y].neid;}
}