2019-05-09 团体程序设计天梯赛-练习集 L2-002 链表去重 (25 分)

/*

****************本题大致思路:*****************

首先是数据存储,用map存 第一个数据(string)是键  2,3数据(class)是值

然后遍历这个“链表”

对于每个链表的数据,首先看此数据之前出现过没(绝对值一样就算出现过),出现过就添加到vector中,

没有就把绝对值添加到set中(此set就能看出哪个数据出现过),并且输出

最后遍历输出vector

*/

#include

#include

#include

#include

#include

#include

#define iIN(L,R) for(int i=L;i

using namespace std;

class Data

{

public:

int num;

string next;

Data(){} //这个构造函数必须有

Data(int n1,string n2){

num=n1;

next=n2;

}

void operator=(Data d){

this->num=d.num;

this->next=d.next;

}

};

map M;//核心数据结构

vector vec;

vector    vec2;//两个vector 装题目中所说的被删除的链表

set S;        //装第一次出现的num的绝对值

int main()

{

string now;

int N;

string key;

int num;

string snum;

string next;

Data box;

stringstream water;

cin>>now>>N;

iIN(0,N){

cin>>key>>num>>next;

Data *d=new Data(num,next);

M[key]=*d;

}

int mark=0;

while(1){

if(now=="-1")

{

cout<<" "<<-1<

break;

}

box=M[now];

num=box.num;

next=box.next;

if(S.count(abs(num))==0){ //第一次出现

if(mark){ //控制输出格式

cout<<" "<

}

else

{

mark=1;

if(now!="-1")

cout<

}

S.insert(abs(num));

}

else{                //非第一次

vec.push_back(now);

vec2.push_back(num);

}

now=next;

}

mark=0;

iIN(0,vec.size()){

if(mark){

cout<<" "<

}

else{

mark=1;

cout<

}

}

if(vec.size()>0)

cout<<" "<<-1<

return 0;

}

你可能感兴趣的:(2019-05-09 团体程序设计天梯赛-练习集 L2-002 链表去重 (25 分))