题目来源:团体程序设计天梯赛-练习集
题目地址:L2-002 链表去重

题目大意

将链表数据域的值相同(包含绝对值相同)的节点去掉,然后将去掉的节点又重新组成一条链表,最后输出去重后的链表和被去掉的节点组成的链表。样例表示如下:

题目分析

这道题的题目难度相对较低,只要你熟悉链表的遍历和删除操作,就可以顺利完成这道题。虽然话是那么说,但是用对了数据结构可以让解题事半功倍。

  • 设 lblblb 数组用于存储输入的链表,我们可以用数组下标表示当前节点地址,就可以避免遍历时寻址的麻烦
  • 设 rerere 数组用于存储被去除节点组成的链表,这时我们可以直接顺序存储被去除的节点,而且只需要存储节点的地址和数据域,这样我们就可以利用顺序知道每个下个节点的地址了。
  • 事实上,我们可以发现 lblblb 相当于链表,而 rerere 相当于顺序表。它们的存储示意图如下:

了解到上面这些,写代码已经顺利了(默认你会链表的遍历和删除),最后再说一下写题目踩到的坑:

  • 地址直接用 intintint 类型存储,没必要用 stringstringstring,否则无法用上上述存储结构(别跟我说用 mapmapmap ,我第一发就是这样超时的)。
  • 格式控制符 “%05d” 表示如果输出的字符少于5位时,在左边补 000 (默认是补空格)。
  • 删除操作需要用到前驱节点 preprepre 的指针 ,preprepre 在每次遇到不需要删除的节点时就要更新,如果单纯的直接用上一个节点,就可能用到被去除节点的地址。

代码如下

#include <bits/stdc++.h>using namespace std;
const int maxn = 1e5 + 10;
int n, cnt;
int one, s, pre;
/*** lb用于存储原始链表* re用于存储原始链表中的重复节点*/
pair<int, int> lb[maxn];
pair<int, int> re[maxn];
set<int> vis;int main()
{cin >> one >> n;for (int i = 1; i <= n; i++) {int address, num, next;cin >> address >> num >> next;lb[address] = make_pair(num, next);}cnt = 0;//遍历链表,s表示当前节点的地址for (s = one; s != -1; s = lb[s].second) {int num = lb[s].first;if (!vis.count(abs(num))) {vis.insert(abs(num));//pre记录下一个节点的前驱节点地址pre = s;} else {//链表删除重复节点操作lb[pre].second = lb[s].second;//将删除的节点存到另一条链表re[cnt].first = num;re[cnt].second = s;cnt++;}}for (s = one; s != -1; s = lb[s].second) {printf("%05d %d ", s, lb[s].first);if (lb[s].second != -1) printf("%05d\n", lb[s].second);else printf("-1\n");}for (int i = 0; i < cnt; i++) {printf("%05d %d ", re[i].second ,re[i].first);if (i != cnt - 1) printf("%05d\n", re[i + 1].second);else printf("-1\n");}return 0;
}

如果本文对你有所帮助,别忘了点赞哦~

L2-002 链表去重-团体程序设计天梯赛GPLT相关推荐

  1. L2-022 重排链表-PAT团体程序设计天梯赛GPLT

    给定一个单链表 L~1~→L~2~→-→L~n-1~→L~n~,请编写程序将链表重新排列为 L~n~→L~1~→L~n-1~→L~2~→-.例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5 ...

  2. L2-005 集合相似度-PAT团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-005 集合相似度 题目大意 给定 nnn 个集合,然后有 kkk 次询问,每次询问都要求出 Nc/Nt×100%N_c / N_t \times ...

  3. L2-006 树的遍历-团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-006 树的遍历 题目大意 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 预备知识: 中序遍历 ...

  4. L2-004 这是二叉搜索树吗?-团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-004 这是二叉搜索树吗? 题目大意 给定一个长度为 nnn 的序列,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果.如果是,则在一行中输 ...

  5. L2-003 月饼-团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-003 月饼 题目大意 题目给定月饼种类的数量和市场最大需求量,以及各个种类月饼的库存量.总售价.,请你计算可以获得的最大收益! 题目分析 这是一 ...

  6. L2-001 紧急救援-团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-001 紧急救援 题目描述 题目大意 题目给出一张图,其中包括道路连接的城市和它们的距离,以及每个城市救援队的数量,最后求从出发地城市到目的地城市 ...

  7. L1-079 天梯赛的善良 (20 分)-PAT 团体程序设计天梯赛 GPLT

    天梯赛是个善良的比赛.善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分. 于是命题组首先将编程能力划分成了 106个等级( ...

  8. L1-078 吉老师的回归 (15 分)-PAT 团体程序设计天梯赛 GPLT

    曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦! 为了简化题目,我们不妨假设天梯赛的每道题目可以用一个不超过 500 的.只包括可打印符号的字符串描述出来,如:Problem A: Print &q ...

  9. [Python] L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT

    2018年天梯赛的注册邀请码是"2018wmyy",意思就是"2018我们要赢".本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在第 ...

最新文章

  1. harmonyos开发者邀请码,HarmonyOS 2.0鸿蒙第二期开发者Beta公测申请指南
  2. 设置MySQL/MariaDB 数据库默认编码为utf8mb4 (推荐)
  3. [译] Redux 有多棒?
  4. Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】
  5. go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别
  6. vmware-images
  7. Mysql---之Mysqladmin修改账号密码方式
  8. CRM WebClient UI里标准configuration和custom configuration区别
  9. 图 | 为什么存在关于图的研究
  10. 用phpexcel导入导出文件
  11. 量化投资学习——行业轮动规律
  12. operator的理解
  13. 睡梦音乐声悠悠...
  14. 无线地磁传感器可以产生哪些社会效益
  15. 回路电感详细介绍(环路电感)
  16. Godaddy域名如何使用DNSPod做DNS解析
  17. CPU芯片里有几亿个晶体管制作流程
  18. nb移动udp_NB-IOT使用LWM2M移动onenet基础通信套件对接之APN设置
  19. 修改字符串指定范围的颜色
  20. 汇编语言DW、DB和DD的区别

热门文章

  1. linux kernel中的中断处理流程
  2. Ubuntu配置静态ip联网总结
  3. 告诉你,初学网络安全应该怎样去学呢?安排的明明白白的
  4. Windows APC学习笔记(二)—— 挂入过程执行过程
  5. MySQL FLOAT、DOUBLE、DECIMAL(小数类型)
  6. 力扣 : 283. 移动零
  7. 2.4.2 死锁的处理策略-预防死锁
  8. jQuery的延迟对象
  9. golang mysql商业用例_完美起航-golang操作mysql用例
  10. Java有线程安全的set吗?