【CCCC】L2-002 链表去重 (25分),,把一个链表拆成两个

举报
小哈里 发表于 2022/05/10 22:56:26 2022/05/10
【摘要】 problem L2-002 链表去重 (25分) 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须...

problem

L2-002 链表去重 (25分)
给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。

输入格式:
输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤10
​5
​​ ,为结点总数)。一个结点的地址是非负的 5 位整数,空地址 NULL 用 −1 来表示。

随后 N 行,每行按以下格式描述一个结点:

地址 键值 下一个结点
其中地址是该结点的地址,键值是绝对值不超过10
​4
​​ 的整数,下一个结点是下个结点的地址。

输出格式:
首先输出去重后的链表,然后输出被删除的链表。每个结点占一行,按输入的格式输出。

输入样例:
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
输出样例:
00100 21 23854
23854 -15 99999
99999 -7 -1
00000 -15 87654
87654 15 -1

  • 题意:给出一个链表,按照键值拆成两个,分别输出

solution

  • 用map<int,node>或node li[maxn]存原始链表节点。(必须先存完才能遍历
  • 遍历一遍原始链表,按照键值重复分成l1,l2两类。
  • 输出时已经按顺序,直接输下一节点的开始地址即可(这样就不用去更新每个节点下一个节点的地址值了)。
#include<bits/stdc++.h>
using namespace std;

struct node{ int address, key, next;};
map<int,node>ma;//list
bool exsit[100010];
vector<node>l1,l2;//ans

int main(){
	//input
	int begin, n;
	cin>>begin>>n;
	for(int i = 0; i < n; i++){
		int x;  cin>>x;
		cin>>ma[x].key>>ma[x].next;
	}
	//solve
	for(int i = 0; i < n; i++){
		node t; t.address = begin, t.key = ma[begin].key, t.next = ma[begin].next;
		if(!exsit[abs(ma[begin].key)]){
			exsit[abs(ma[begin].key)] = 1;
			l1.push_back(t);
		}else{
			l2.push_back(t);
		}
		begin = ma[begin].next;
		if(begin==-1)break;
	}
	//output
	for(int i = 0; i < l1.size(); i++){
		printf("%05d %d ", l1[i].address,l1[i].key);
		if(i != l1.size()-1)
			printf("%05d\n", l1[i+1].address);
		else 
			printf("-1\n");
	}
	for(int i = 0; i < l2.size(); i++){
		printf("%05d %d ", l2[i].address,l2[i].key);
		if(i != l2.size()-1)
			printf("%05d\n", l2[i+1].address);
		else 
			printf("-1\n");
	}	
	return 0;
}



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。

原文链接:gwj1314.blog.csdn.net/article/details/108903968

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。