算法刷题笔记 单链表(C++实现)
文章目录
- 题目描述
- 基本思路
- 实现代码
题目描述
实现一个单链表,链表初始为空,支持三种操作:
- 向链表头插入一个数;
- 删除第 k个插入的数后面的一个数;
- 在第 k个插入的数后插入一个数。
现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。
注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。
输入格式
- 第一行包含整数
M,表示操作次数。 - 接下来
M行,每行包含一个操作命令,操作命令可能为以下几种:H x,表示向链表头插入一个数x。D k,表示删除第k个插入的数后面的数(当k为0时,表示删除头结点)。I k x,表示在第k个插入的数后面插入一个数x(此操作中k均大于 0)。
输出格式
- 共一行,将整个链表从头到尾输出。
数据范围
1 ≤ M ≤ 100000- 所有操作保证合法。
基本思路
- 在通常情况下以及我们的课程学习过程中,都是使用一个结构体表示链表结点或完整的链表。但是,这种方式需要每次使用
new运算符创建一个新的链表结点,而这实际上是一个非常低效的方式。因此,实际的算法竞赛中,往往使用一个数组或向量来模拟出一个链表,称为静态链表,从而避免低效的动态内存分配。 - 单链表的实际作用主要是写邻接表,用来存储图和树。
实现代码
#include <iostream>
#include <vector>
using namespace std;typedef int value;
typedef int pos;
vector< pair<value, pos> > List;int head = -1;inline void insert_to_head(const int& x)
{List.push_back({x, head});head = List.size() - 1;
}inline void del_after(const int& k)
{if(k == 0) head = List[head].second;else List[k - 1].second = List[List[k - 1].second].second;
}inline void insert_after(const int& k, const int& x)
{List.push_back({x, List[k - 1].second});List[k - 1].second = List.size() - 1;
}int main(void)
{int m;cin >> m;for(int i = 0; i < m; ++i){char operation;cin >> operation;if(operation == 'H'){int x;cin >> x;insert_to_head(x);}else if(operation == 'D'){int k;cin >> k;del_after(k);}else if(operation == 'I'){int k, x;cin >> k >> x;insert_after(k, x);}}while(List[head].second != -1){cout << List[head].first << " ";head = List[head].second;}cout << List[head].first << " ";return 0;
}
注意事项:
- 这里如果不使用
cin进行输入,而是使用scanf函数的话,会出现奇怪的难以解释的错误。因此,以后的算法编程题目中,如果不是输入量特别大的话,都尽量使用更加简单的cin方式进行输入。
相关文章:
算法刷题笔记 单链表(C++实现)
文章目录 题目描述基本思路实现代码 题目描述 实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数;删除第 k个插入的数后面的一个数;在第 k个插入的数后插入一个数。 现在要对该链表进行M次操作&#x…...
Oracle 排查慢SQL
Oracle 排查慢SQL select * from v s q l a r e a w h e r e r o w n u m < 10 ; s e l e c t ∗ f r o m v sqlarea where rownum<10; select * from v sqlareawhererownum<10;select∗fromvsql where rownum<10; select * from dba_hist_sqltext where rownum<…...
java技术专家面试指南80问【java学习+面试宝典】(七)
Dubbo需要 Web 容器吗? 不需要,如果硬要用 Web 容器,只会增加复杂性,也浪费资源。 PrintStream、BufferedWriter、PrintWriter的比较? PrintStream类的输出功能非常强大,通常如果需要输出文本内容,都应…...
4机器学习期末复习
在机器学习中,数据清洗与转换包括哪些内容? 对数据进行初步的预处理,需要将其转换为一种适合机器学习模型的表示形式对许多模型类型来说,这种表示就是包含数值数据的向量或者矩阵: 1)将类别数据编码成为对…...
chatgpt: int t[] int *t 区别
在C语言中,int t[]和int *t虽然在某些情况下可以相互替换,但它们有一些关键的区别。这些区别主要体现在声明的语义、内存分配方式和使用场景上。以下是详细的解释: ### 1. int t[] #### 语义: - int t[]声明了一个数组,t是一个数…...
网络安全技术实验六 入侵检测技术实践
一、实验目的和要求 理解基于网络的入侵检测系统的基本原理,掌握snort IDS工作机理; 学习应用snort三种方式工作;熟练编写snort规则; 完成snort数据包记录、日志查看、字符串匹配、ARP欺骗攻击检测、端口扫描工具检测等功能。 …...
SpringBoot中获取当前请求的request和response
在Spring Boot中,你可以以多种方式获取当前请求的HttpServletRequest和HttpServletResponse对象。以下是几种常见的写法示例: 1. 在方法参数中声明 最常见和推荐的方式是在控制器方法的参数中直接声明HttpServletRequest和HttpServletResponse对象。Sp…...
Neo4j 桌面版打不开踩坑贴
真的踩坑。。。没有人告诉我为啥桌面版和社区版不能一起下啊!! 我是先下载了社区版之后再下载的桌面版,结果桌面版界面一直打不开。 尝试了网上多种办法都没效果,好多都是说jdk不兼容导致无法打开,让我从JDK 17 ->…...
[数据集][目标检测]中国象棋检测数据集VOC+YOLO格式300张12类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):300 标注数量(xml文件个数):300 标注数量(txt文件个数):300 标注类别…...
全方位·多层次·智能化,漫途水库大坝安全监测方案
党的十九届五中全会提出,到2025年前,完成新出现病险水库的除险加固,配套完善重点小型水库雨水情和安全监测设施,实现水库安全鉴定和除险加固常态化。 加快推进小型水库除险加固。加快构建气象卫星和测雨雷达、雨量站、水文站组成…...
windows安装SQLyog
windows安装SQLyog 1. 下载 SQLyog 安装包 访问 SQLyog 的官方网站。在网站上找到下载链接,通常会有一个“Download”或“Try Now”按钮。如果需要注册或填写信息以获取下载链接,请按提示操作。 2. 运行安装程序 下载完成后,双击运行下载…...
jEasyUI 转换 HTML 表格为数据网格
jEasyUI 转换 HTML 表格为数据网格 jEasyUI 是一个基于 jQuery 的框架,它为用户提供了一套完整的用户界面组件,使得网页开发变得更加简单快捷。在本文中,我们将探讨如何使用 jEasyUI 将一个普通的 HTML 表格转换为功能丰富的数据网格(datagrid)。 为什么使用数据网格? …...
深度解析RocketMq源码-持久化组件(一) MappedFile
1. 绪论 rocketmq之所以能够有如此大的吞吐量,离不开两个组件,一个是利用netty实现的高性能网络通信组件;另一个就是利用mmap技术实现的存储组件。而在rocketmq的存储组件中主要有三个组件,分别是持久化文件commitLog,…...
贝壳APP渗透测试WP
前期配置 环境说明 使用PIXEL 4手机,为Android 12系统 APP名为贝壳找房,包名com.lianjia.beike,版本号3.01.10,截至2024/05/07为最新版,小米应用市场下载 绕过反Frida机制 可以参考往期推送,《绕过最新…...
IDEA快速入门02-快速入门
二、快速入门 2.1 打开IDEA,点击New一个项目 入口,依次打开 File -> New -> Project。 2.2 使用Spring Initializr方式构建Spring Boot项目 2.3 设置项目所属组、项目名称、java版本等 2.4 选择SpringBoot版本及依赖组件 点击Create进行创建。 2.6 创建成…...
快速构建本地RAG聊天机器人:使用LangFlow和Ollama实现无代码开发
基于LangChain的快速RAG应用原型制作方法 还记得构建智能聊天机器人需要数月编码的日子吗? LangChain这样的框架确实简化了开发流程,但对非程序员来说,数百行代码仍然是一道门槛。 有没有更简单的方法呢? 图片由 Ravi Palwe 在…...
关于使用pycharm中控制台运行代码错误之FileNotFoundError: [Errno 2] No such file or directory:
在使用pycharm环境下复现《python编程:从入门到实践》这本书第16.1.1内容中分析csv文件头一节的代码时出现如下问题: 1、文章中使用的数据来源问题 直接参考本站Kenny C同学的文章提供内容即可。 https://github.com/kenidi8215/Hello-World 打开网页&a…...
【SpringBoot】深入分析 SpringApplication 源码:彻底理解 SpringBoot 启动流程
在黄昏的余晖里,梦境渐浓,如烟如雾。心随星辰,徜徉远方,岁月静好,愿如此刻般绵长。 文章目录 前言一、SpringBoot 应用二、SpringApplication2.1 SpringApplication 中的属性2.2 SpringApplication 的构造器2.3 Sprin…...
边界内聚和耦合
内聚 功能内聚 功能内聚是软件工程中一个重要的概念,它描述了一个模块内部各个元素之间的紧密程度。一个具有高功能内聚的模块意味着其内部的各个组件都共同完成一个具体的、明确的功能,并且这些组件之间的联系不是偶然的,而是因为它们共同服…...
单调栈——AcWing.830单调栈
单调栈 定义 单调栈是一种特殊的数据结构,栈内元素保持某种单调性(通常是单调递增或单调递减)。 运用情况 求解下一个更大元素或下一个更小元素。计算每个元素左边或右边第一个比它大或小的元素。 注意事项 要明确单调栈是递增还是递减…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
