L2-002 链表去重(链表+模拟)

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-002 链表去重(链表+模拟)相关的知识,希望对你有一定的参考价值。

题目链接

https://pintia.cn/problem-sets/994805046380707840/problems/994805072641245184

思路

我们用一个map 记录地址映射,在键的位置记录当前地址,值的位置记录下一个地址的位置,然后我们用一个 vis 数组标记我们的值的绝对值是否被加入了 win 链表,如果没有加入那么我们就将其加入 loser 链表,这样的话就将链表去重了,最后实现一个打印操作即可,注意这里我们可以通过scanf的格式化输出%05d来方便我们补前缀0

代码

#include<bits/stdc++.h>
using namespace std;

const int N = 1e6+10;
int n,s;
int a[N];
bool vis[N];

map<int,int> mark;

void print(vector<int> & V)
	int p,np;
	for(int i = 0,l = V.size();i < l; ++i) 
		p = V[i];
		if(i < l) np = V[i + 1];
		if(i == l - 1) printf("%05d %d -1\\n",p,a[p]);
		else printf("%05d %d %05d\\n",p,a[p],np);
	


int main()

	vector<int> win,loser;
	scanf("%d %d",&s,&n);
	int p,k,nex,np;
	for(int i = 1;i <= n; ++i) 
		scanf("%d %d %d",&p,&k,&nex);
		mark[p] = nex;
		a[p] = k;
	
	p = s;
	while(p != -1) 
		if(vis[abs(a[p])]) loser.push_back(p);
		else win.push_back(p);
		vis[abs(a[p])] = true;
		p = mark[p];
	
	print(win);
	print(loser);	
	return 0;

以上是关于L2-002 链表去重(链表+模拟)的主要内容,如果未能解决你的问题,请参考以下文章

L2-002. 链表去重

L2-002 链表去重 (25 分)

pat L2-002 链表去重

L2-002 链表去重 (25 分)

PTA团体程序设计天梯赛-练习集 L2题目总结(完)

链表去重