当前位置: 首页 > news >正文

[pta]L2-002 链表去重

L2-002 链表去重

分数 25

作者 陈越

单位 浙江大学

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

输入格式:

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

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

地址 键值 下一个结点

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

输出格式:

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

输入样例:

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

我的想法:

我的想法很直接,既然地址这东西是唯一的,而且都是五位数,直接先开两个数组key和nxt来存储链表的键值和下一个地址,而这两个的数组的下标就用相应的当前的地址就行了

然后开一个list来顺序整理当前的地址

然后再开一个keep和dei,一个顺序记录去重后的地址,一个顺序记录键值重复的地址,开一个vs数组来记录键值是否重复

遍历list,不是重复的就放进keep,是重复的就放进del

输出这一步比较关键,把当前地址和键值看做一个整体,一起输出,至于下一个地址,显然,和下一行(如果有的话)的当前地址一致,那么直接输出keep[i+1]或者del[i+1]就行了,这样就不用考虑已修改原本存的下一个地址了

代码如下

#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int key[N], nxt[N], n, head; int main() { cin >> head >> n; for (int i = 0; i < n; i++) { int add; cin >> add; cin >> key[add] >> nxt[add]; } vector<int>list; for (int p = head; p != -1; p = nxt[p]) { list.push_back(p); } vector<int>keep, del; int vs[N] = { 0 }; for (auto add : list) { int abskey = abs(key[add]); if (!vs[abskey]) { keep.push_back(add); vs[abskey] = 1; } else del.push_back(add); } for (int i = 0; i < keep.size(); i++) { printf("%05d %d ", keep[i], key[keep[i]]); if (i == keep.size() - 1)printf("-1\n"); else printf("%05d\n", keep[i + 1]); } for (int i = 0; i < del.size(); i++) { printf("%05d %d ", del[i], key[del[i]]); if (i == del.size() - 1)printf("-1\n"); else printf("%05d\n", del[i + 1]); } return 0; }
http://www.jsqmd.com/news/328146/

相关文章:

  • 结构体(Java 类)实战题解笔记(持续更新)
  • 国际会议口头报告全攻略:从内容构思到完美呈现
  • SpringBoot+Vue Spring Boot疗养院管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • 【Linux系统】进程间通信:基于匿名管道实现进程池
  • Java SpringBoot+Vue3+MyBatis 经方药食两用服务平台系统源码|前后端分离+MySQL数据库
  • 【Java 笔记】面向对象核心 - 内存图
  • 2026年宜昌汽车保险过户代理服务商深度解析与选购指南
  • 2026年湖北省购车:如何一站式解决保险、过户与精品车源难题?
  • 2026年安徽金属字标识公司综合实力TOP5深度解析
  • 武汉粮油批发零售实力门店选型指南:数据解读与推荐
  • 2026年河北路边石工程选型:五大实力直销厂家深度解析
  • 2026年长沙休闲零食批发零售门店选购指南与TOP5推荐
  • 2026年景观标识与流水景墙领域六家领先服务商深度解析
  • 旋转标识行业趋势下的安徽诚信企业选择
  • 2026年初可靠的纯原榨石榴汁领导厂商选择标准与选型指南
  • 2026年枣庄石榴汁定制厂家综合评估与精选推荐
  • 2026年合肥省考服务商深度评估:三甲机构谁更胜一筹?
  • 2026年安徽编制考试培训机构口碑实力盘点
  • 2026年武汉石材装饰装修加工厂综合实力盘点与选型指南
  • 2026年初,如何甄选一家靠谱的智能母线槽定做厂家?
  • 2026开年数据母线槽定制厂商综合评测:高标何以领跑?
  • 2026年优质软籽石榴榨汁品牌综合评估与推荐
  • 2026年湖北石材装饰品牌综合评测与选购指南
  • 基于SpringBoot+Vue的+乡政府管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 2026年Q1广东艺术漆优质厂家综合评测与选购指南
  • 彻底告别 `$set`:从“数字化餐厅”看 Vue3 响应式的全感知进化
  • 2026年广东艺术漆热门厂家综合评选与深度解析
  • 2026年湖北石材装饰装修公司联系与综合选型指南
  • Miloco v0.1.6 :米家摄像头清晰度配置 + RTSP 音频传输
  • 青年公寓服务平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】