创建两个vector分别存储输出的链表和被移除的链表
判断之前是否出现过绝对值相同的数字:用set.insert()和set.size()结合起来判断
#include<cstdio>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
typedef struct _list{
int address;
int num;
int abs;
int next;
}List;
int main()
{
List* myList=new List[100010];
int start,N;
scanf("%d %d",&start,&N);
int i;
for(i=0;i<N;i++)
{
int ad;
scanf("%d",&ad);
myList[ad].address=ad;
scanf("%d %d",&myList[ad].num,&myList[ad].next);
myList[ad].abs=abs(myList[ad].num);
}
vector<List> output;
vector<List> remove;
set<int> st;
int size=st.size();
int p=start;
while(p!=-1)
{
st.insert(myList[p].abs);
if(size==st.size())remove.push_back(myList[p]);
else
{
size=st.size();
output.push_back(myList[p]);
}
p=myList[p].next;
}
if(output.size()!=0)
{
for(i=0;i<output.size()-1;i++)
{
printf("%05d %d %05d\n",output[i].address,output[i].num,output[i+1].address);
}
printf("%05d %d -1\n",output[i].address,output[i].num);
}
if(remove.size()!=0)
{
for(i=0;i<remove.size()-1;i++)
{
printf("%05d %d %05d\n",remove[i].address,remove[i].num,remove[i+1].address);
}
printf("%05d %d -1",remove[i].address,remove[i].num);
}
return 0;
}