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

L2-002 链表去重(C++)

给定一个带整数键值的链表 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

代码:

#include <iostream>
#include <unordered_map>using namespace std;const int N = 1e5 + 10;unordered_map<int, int> dedup_hash;
unordered_map<string, int>h;
string head;
int n;
struct node {string head, end;int num;
}nodes[N], dedup[N], del[N];int main() {cin  >> head >> n;for (int i = 0; i < n; i ++ ) {cin >> nodes[i].head >> nodes[i].num >> nodes[i].end;h[nodes[i].head] = i;}string l = head, r = "-1";int l_cnt = 0, r_cnt = 0;int root = h[head];while(1) {if (!dedup_hash[abs(nodes[root].num)]) {dedup_hash[abs(nodes[root].num)] = 1;if (l_cnt != 0) dedup[l_cnt - 1].end = nodes[root].head;dedup[l_cnt].head = nodes[root].head;dedup[l_cnt].num = nodes[root].num;// dedup[l_cnt].end = "-1";l_cnt ++ ;}else {if (r_cnt != 0) del[r_cnt - 1].end = nodes[root].head;del[r_cnt].head = nodes[root].head;del[r_cnt].num = nodes[root].num;r_cnt ++ ;}if (nodes[root].end == "-1") break;root = h[nodes[root].end];}for (int i = 0; i < l_cnt; i ++ ) {if (i == l_cnt - 1) cout << dedup[i].head << ' ' << dedup[i].num << ' ' << "-1" << endl;else cout << dedup[i].head << ' ' << dedup[i].num << ' ' << dedup[i].end << endl;}for (int i = 0; i < r_cnt; i ++ ) {if (i == r_cnt - 1) cout << del[i].head << ' ' << del[i].num << ' ' << "-1" << endl;else cout << del[i].head << ' ' << del[i].num << ' ' << del[i].end << endl;}
}

相关文章:

  • PyTorch tutorials:快速学会使用PyTorch
  • 从0开始学人工智能测试节选:Spark -- 结构化数据领域中测试人员的万金油技术(四)
  • Jmeter —— jmeter设置HTTP信息头管理器模拟请求头
  • Python 连接 MySQL 及 SQL增删改查(主要使用sqlalchemy)
  • 基于百度翻译API的火车头PHP翻译插件,可以翻译HTML片段
  • mybatis-plus 多租户方案1使用和坑注意事项,方案是需要实现租户功能的表都增加租户id字段
  • 【Linux多线程】线程的终止、等待和分离
  • Bond 网卡绑定技术学习
  • k8s-CCE创建工作负载变量引用
  • jquery.datetimepicker无法添加清除按钮的问题
  • eNSP学习——RIP的路由引入
  • 记录一下npm安装时的错误排查过程
  • 2024-06-06 问AI: 在深度学习中,什么是欧几里德长度?
  • QT串口调试助手V2.0(源码全开源)--上位机+多通道波形显示+数据保存(优化波形显示控件)
  • 【全开源】云调查考试问卷系统(FastAdmin+ThinkPHP+Uniapp)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C学习-枚举(九)
  • express如何解决request entity too large问题
  • HTML中设置input等文本框为不可操作
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • If…else
  • Javascript弹出层-初探
  • JS函数式编程 数组部分风格 ES6版
  • python_bomb----数据类型总结
  • rabbitmq延迟消息示例
  • socket.io+express实现聊天室的思考(三)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 构造函数(constructor)与原型链(prototype)关系
  • 规范化安全开发 KOA 手脚架
  • 将 Measurements 和 Units 应用到物理学
  • 近期前端发展计划
  • 老板让我十分钟上手nx-admin
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 目录与文件属性:编写ls
  • 使用 Docker 部署 Spring Boot项目
  • 怎么把视频里的音乐提取出来
  • nb
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #数据结构 笔记一
  • $$$$GB2312-80区位编码表$$$$
  • $jQuery 重写Alert样式方法
  • (04)odoo视图操作
  • (1) caustics\
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)STM32单片机上位机
  • (C++17) std算法之执行策略 execution
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424