7-4链表去重

news2024/11/18 20:21:47

题目

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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 思路

用一个map<string, node> mp;存放所有节点,其中键为节点地址,值为节点的值和下一个地址

map<string, node> mp;
struct node {
    int val;
    string nextadress;
    node(){};
    node(int c, string b)
    {
        val = c; nextadress = b;
    }
};

然后用类似深度优先搜索的思路将链表按照“地址”顺序遍历一遍,同时用map<int, int> visited;标记所有出现过的绝对值有没有被访问过,用一个vector<string> v;存放要被删除节点的地址。在遍历过程中如果节点值的绝对值x没有被访问过,则输出节点的地址和值,然后顺着地址找到第一个绝对值不等于x并且绝对值没有被访问过的节点,输出该节点地址,随后遍历该节点。一直遍历到最后一个节点为止。

代码&&运行

#include<iostream>
#include<string>
#include<map>
#include<vector>
using namespace std;
struct node {
    int val;
    string nextadress;
    node(){};
    node(int c, string b)
    {
        val = c; nextadress = b;
    }
};
map<string, node> mp;
map<int, int> visited;
vector<string> v;//存放被删除的链表的地址
int main()
{
    ios::sync_with_stdio(false);
    string head;
    int n;
    cin >> head >> n;
    int cnt = 0;

    for (int i = 0; i < n; i++)
    {
        string a, b;
        int c;
        cin >> a >> c >> b;
        visited[abs(c)] = 0;
        mp[a].val = c;
        mp[a].nextadress = b;
    }
    string s = head;
    while (s != "-1")
    {
        string t = mp[s].nextadress;
        while( t!="-1"&&( abs(mp[t].val)==abs(mp[s].val)||visited[abs(mp[t].val)] ) )
        {
            v.push_back(t);
            t=mp[t].nextadress;
        }
        visited[abs(mp[s].val)]=1;
        cout<<s<<" "<<mp[s].val<<" "<<t<<endl;
        s=t;
    }
    /*      输出被删除部分     */
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << " " << mp[v[i]].val << " ";
        if (i != v.size() - 1) cout << v[i + 1] << endl;
        else cout << "-1\n";
    }
}

提醒

该题的输入输出量较大,所以在cin和cout之前加上ios::sync_with_stdio(false);换行尽量用'\n'别用cout<<endl; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

confluence无法打开空间目录

confluence无法打开空间目录&#xff0c;打开空间目录后无法显示项目 查看项目的类别信息都在 问题原因 由于索引损坏导致&#xff1b; This issue is caused by acorrupted index. Confluence is trying to fetch information about the spacesfrom the available index, …

GB28181设备对接视频流的流程

搭建CG28181 服务端&#xff0c;也即 SIP Server&#xff0c;这正是我们要实现的。实现CG28181服务端可以借助于现有的开源库 PJSIP&#xff0c;具体的实现步骤如下&#xff1a; 1、启动GB28181服务端&#xff0c;接收客户端消息请求 bool Init(std::string concat, int logL…

Unity中使用VS常用技巧

文章目录 1、Unity预览代码中文显示乱码解决方案2、VS中格式化代码快捷键 1、Unity预览代码中文显示乱码解决方案 ①打开VS&#xff0c;在 扩展 中找到 管理扩展 打开 ②在 管理扩展面板 联机 中搜索 Force UTF-8(No BOM) &#xff0c;点击下载即可 ③重启VS 如果以前编写的脚…

本地顺风车小程序源码系统 源码开源可二次开发 出行无忧:一键预约顺风车 带完整搭建教程

共享经济和互联网技术的发展。随着人们出行需求的不断增加&#xff0c;顺风车作为一种绿色、共享的出行方式&#xff0c;越来越受到广大用户的青睐。为了满足这种需求&#xff0c;本地顺风车小程序应运而生&#xff0c;为用户提供了一种方便、快捷、可靠的顺风车出行服务。 以…

HelloWorld - 从Houdini导出HDA到UE5

1.配置插件 在Houdini安装目录下找到对应版本引擎的插件&#xff0c;例如这里是Houdini19对应UE5.2的版本&#xff0c;我们就要保证先下载好UE5.2&#xff1a; 将Houdini插件粘贴到UE安装目录的Plugins文件夹下&#xff1a; 目前插件配置完成&#xff0c;打开UE会自动启用插…

兼容最新 urllib3 版本及相关库

解决方案 对于这个问题&#xff0c;我们可以通过修改setup.py文件来解决。在setup.py文件中&#xff0c;我们将urllib3的版本范围从1.21.1到1.26改为1.21.1到最新版本。这是因为在patch中&#xff0c;我们已经检查了urllib3的版本&#xff0c;并确保其大于1…

ceph 14.2.10 aarch64 非集群内 客户端 挂载块设备

集群上的机器测试 706 ceph pool create block-pool 64 64 707 ceph osd pool create block-pool 64 64 708 ceph osd pool application enable block-pool rbd 709 rbd create vdisk1 --size 4G --pool block-pool --image-format 2 --image-feature layering 7…

资讯 | 图扑应邀出席“数字孪生•筑梦末来”数字工程论坛

2023"数字孪生 筑梦未来"数字工程论坛于 11 月 8 日在杭州拉开帷幕。该论坛是由中国电建集团华东勘测设计研究院有限公司发起创办全国性“工程IT”高端交流平台活动。 图扑软件作为受邀参展企业之一&#xff0c;有幸与诸位专家学者、参展客户共同领略数字化发展的成…

在Python中使用sqlite3进行数据持久化操作

目录 引言 一、安装sqlite3模块 二、创建数据库连接 三、创建游标对象 四、执行SQL命令 五、提交更改 六、关闭连接 七、使用参数化查询 八、使用ORM进行数据操作 九、备份和恢复数据库 十、处理大量数据 十一、优化查询性能 十二、处理并发访问 十三、处理数据持…

C/C++ stm32基础知识超详细讲解(系统性学习day14)

目录 前言 一、ARM和STM32是什么&#xff1f; 二、STM32的开发方式 三、GPIO----寄存器开发方式 1.八种输入输出模式分析 2.寄存器 四、stm32芯片图片 五、怎么学好stm32 总结 前言 stm32的广泛含义及背景&#xff1a; STM32是一款由意法半导体&#xff08;ST&…

基于flask和fomantic-ui的简易p2p文件分享平台的手动实现

背景 开学一个多月了&#xff0c;由于繁重的学业和懒惰&#xff0c;都没怎么更新有意思的博客。 前几天突然想到了一个想法。同学之间平常用网络分享一个文件&#xff0c;大部分都是用的qq。但是qq看起来把文件拖到聊天框点击发送就发给对面同学了。但是实际上是先上传到了腾…

Spark通过三种方式创建DataFrame

通过toDF方法创建DataFrame 通过toDF的方法创建 集合rdd中元素类型是样例类的时候&#xff0c;转成DataFrame之后列名默认是属性名集合rdd中元素类型是元组的时候&#xff0c;转成DataFrame之后列名默认就是_N集合rdd中元素类型是元组/样例类的时候&#xff0c;转成DataFrame…

LLM prompt提示工程调试方法经验技巧汇总

现在接到一个LLM模型任务&#xff0c;第一反应就是能不能通过精调prompt来实现&#xff0c;因为使用prompt不需要训练模型&#xff0c;只需输入指令就可以实现和LLM的交互。按照以往经验&#xff0c;不同的prompt对模型输出影响非常大&#xff0c;如果能构造一个好的prompt&…

工业品电商,新的隐形冠军藏不住了?

【潮汐商业评论/原创】 “时代真的变了。”自打从淘宝买了一批配件后&#xff0c;工厂老板李瓦就经常感慨。 李瓦经营着一家专门生产机器零部件的工厂&#xff0c;日常经常要采购传送带、螺丝、螺母等材料&#xff0c;过去他主要通过线下的方式进货。但最近朋友圈里一段淘宝工…

2023.11.15 hive sql之函数标准,字符串,日期,数学函数

目录 一.函数分类标准 二.查看官方函数,与简单演示 三.3种类型函数演示 四.字符串函数 1.常见字符串函数 2.索引函数 解析函数 五.日期函数 1.获取当前时间 2.获取日期相关 3.周,季度等计算 4.时间戳 六.数学函数 一.函数分类标准 目前hive三大标准 UDF:&#xff08…

社区论坛小程序源码系统,功能齐全,页面简洁,前端+后端+完整部署教程

现如今&#xff0c;社区论坛已经成为人们交流思想&#xff0c;分享经验&#xff0c;获取信息的重要平台。近年来&#xff0c;小程序的出现更是改变了传统的网站建设方式&#xff0c;让用户体验更加便捷&#xff0c;高效。今天源码小编来和大家分享一款社区论坛小程序源码系统&a…

基于SSM的OA办公管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

exce常用

一、冻结 同时冻结行和列 打开一个Excel表格&#xff0c;点击选择需要冻结的行和列交接处对应的单元格&#xff08;例如&#xff1a;需要同时冻结1、2行和A、B列&#xff0c;则选中行列交接对应的C3单元格&#xff09;&#xff09;&#xff0c; 即下一行 和下一列的交接点。 …

使用grad-cam对ViT的输出进行可视化

使用grad-cam对ViT的输出进行可视化 文章目录 使用grad-cam对ViT的输出进行可视化前言原理使用代码Pytorch-grad-cam库的更多方法在MMpretrain中使用示例总结 前言 Vision Transformer (ViT) 作为现在CV中的主流backbone&#xff0c;它可以在图像分类任务上达到与卷积神经网络…

mysql数据库超过最大连接数

mysql 超过数据库最大连接数解决办法 1、报错信息 首先无论是navicat 执行sql还是 用idea启动多的服务都会有如下报错信息&#xff1a; 2、解决办法 2.1命令方式修改 这种方法是由其他资料提供的。这种修改方式是临时的&#xff0c;如果mysql服务重启设置就会还原&#xff…