1097 Deduplication on a Linked List (25 分)
水~,依旧是喜闻乐见的链表题。
题意
给出N个结点的地址address、数据域data以及指针域next,然后给出链表的首地址,要求去除链表上权值的绝对值相同的结点(只保留第-一个),之后把未删除的结点按链表连接顺序输出,接着把被删除的结点也按在原链表中的顺序输出。
const int N=1e5+10;
struct Node
{
int addr;
int data;
int nxt;
}a[N];
bool vis[10010];
int head,n;
void print(vector<Node> &res)
{
for(int i=0;i<res.size();i++)
if(i == res.size()-1)
printf("%05d %d -1\n",res[i].addr,res[i].data);
else
printf("%05d %d %05d\n",res[i].addr,res[i].data,res[i+1].addr);
}
int main()
{
cin>>head>>n;
for(int i=0;i<n;i++)
{
int addr,data,nxt;
cin>>addr>>data>>nxt;
a[addr]={addr,data,nxt};
}
vector<Node> res1,res2;
int p=head;
while(p != -1)
{
if(!vis[abs(a[p].data)]) res1.pb(a[p]);
else res2.pb(a[p]);
vis[abs(a[p].data)]=true;
p=a[p].nxt;
}
print(res1);
print(res2);
//system("pause");
return 0;
}