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

输入格式:
输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤10​5,为结点总数)。一个结点的地址是非负的 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

之前做过类似的,总之是用数组代替真正的链表结构,比较方便,注意输出,什么时候加空格,什么时候换行,什么时候输出-1。关于测试点2,是要判断是否存在被删除的链表(即该链表是否为空,是否有数据,所以来个if(len2)),段错误基本就是数组开的不够大(或者你访问时下标越界了),这个要细看题意,哪个是104,哪个是105
#include <iostream>
#include <cmath>
using namespace std;
int res1[100001],res2[100001];
bool flag[10001] = {false};struct node{int data;int next;
}lis[100001];int main(){ios::sync_with_stdio(false);int head,n;int add;cin >> head >> n;for(int i = 0;i<n;i++){cin >> add;cin >> lis[add].data >> lis[add].next;}int len1 = 0,len2 = 0;//注意i的变化,因为i是地址,所以是lis[i].nextfor(int i = head;i!=-1;i=lis[i].next){int a = abs(lis[i].data);if(!flag[a]){flag[a] = true;res1[len1++] = i;}else{res2[len2++] = i;}}printf("%05d %d",res1[0],lis[res1[0]].data);for(int i = 1;i<len1;i++){printf(" %05d\n%05d %d",res1[i],res1[i],lis[res1[i]].data);}printf(" -1\n");if(len2){printf("%05d %d",res2[0],lis[res2[0]].data);for(int i = 1;i<len2;i++){printf(" %05d\n%05d %d",res2[i],res2[i],lis[res2[i]].data);}printf(" -1\n");}return 0;
}

天梯赛HBU训练营——链表去重 (25分)(测试点2和段错误解决)相关推荐

  1. L2-002 链表去重 (25 分) 船新方法

    L2-002 链表去重 (25 分) 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另一 ...

  2. 7-93 链表去重 (25 分)

    7-93 链表去重 (25 分) 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另一个链 ...

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

    problem L2-002 链表去重 (25分) 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点 ...

  4. C++学习之路 | PTA(天梯赛)—— L2-007 家庭房产 (25分)(带注释)(并查集)(精简)

    L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按 ...

  5. C++学习之路 | PTA(天梯赛)—— L2-010 排座位 (25分)(带注释)(并查集)(精简)

    L2-010 排座位 (25分) 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他 ...

  6. C++学习之路 | PTA(天梯赛)—— L2-013 红色警报 (25分)(带注释)(并查集)(精简)

    L2-013 红色警报 (25分) 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通, ...

  7. 天梯赛---7-6 集合相似度 (25分)

    7-6 集合相似度 (25分) 给定两个整数集合,它们的相似度定义为:N​c​​/N​t​​×100%.其中N​c​​是两个集合都有的不相等整数的个数,N​t​​是两个集合一共有的不相等整数的个数.你 ...

  8. PTA 1025 反转链表 (18/25分) + 测试点解决

    PAT (Basic Level) Practice (中文) 1025 反转链表 (25分) 问题1:在进行读出的时候,需要改动next的值 问题2:面对最后指针-1的改变(测试点3.4) 待尝试: ...

  9. 天梯赛模拟 链表去重 (25 分)

    题目: 给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另一个链表上.例如给定 L 为 2 ...

最新文章

  1. 浅谈SpringMVC执行过程
  2. PHP算法使用__call优化代码
  3. 2014年第五届蓝桥杯C/C++ A组国赛 —— 第三题:日期差
  4. centos在线安装mysql
  5. BZOJ[1051]受欢迎的牛
  6. 面试整理(1):原生ajax
  7. 上海1.3万座玻璃幕墙建筑“一网统管”
  8. 系统架构工作笔记-数据展示进程与读取数据进程分离,实现低耦合(展示软件可适用任意厂家数据库)
  9. Bookmarklet
  10. java工作笔记017---java8新特性_使用lamda表达式进行List分组_排序_去重_随时更新
  11. 基于MSP430f5529的红外循迹小车
  12. 用户故事拆分与MFQ
  13. 笔记--左耳朵耗子叔的成长经历
  14. 安卓开发之路----转自任玉刚大神
  15. Halcon 汉字识别
  16. protocol buffer生成C语言的实现
  17. 关于Android中的画笔画画
  18. 每日一课 | 如何用Python编写一个Lisp解释器
  19. 校园失物招领系统,失物招领系统,校园失物招领管理系统毕设作品
  20. 计算机主机配置有哪些,组装电脑配置推荐有哪些

热门文章

  1. Sky光遇云野光之翼在哪获得
  2. 如何让虚拟角色自然融入现实?
  3. 焦炉集气管压力模糊控制(三输入单输出)
  4. android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现
  5. 实验6-4 单词首字母大写 (15 分)
  6. CAD导出PDF线条很粗怎样设置?
  7. 数据分析系列 之3σ规则/依据拉依达准则来剔除异常值
  8. 这三个文件在 C:\Program Files (x86)\Microsoft Office\root\Office16 下怎么会是符号链接?
  9. P1162 填图颜色 洛谷(BFS的简单应用)
  10. 极客日报第 39 期:小米 11 不送充电器;阿里达摩院 2021 十大科技趋势发布!