【算法基础】链表
一、单链表
![](https://img-blog.csdnimg.cn/img_convert/f9328b5b173e407f8e9b292dba1949c8.png)
例题:
实现一个单链表,链表初始为空,支持三种操作:
向链表头插入一个数;
删除第 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
所有操作保证合法。
输入样例:
10
H 9
I 1 1
D 1
D 0
H 6
I 3 6
I 4 5
I 4 5
I 3 4
D 6
输出样例:
6 4 6 5
代码:
#include <iostream>using namespace std;const int N =100010;//head:头结点的下标,
//e[i]表示结点i的值,
//ne[i]表示i的next指针
//idx存储当前已经用到的哪个点
int head, e[N], ne[N], idx;//初始化
void init()
{head = -1;idx = 0;}//将x插入到头结点
void add_to_head(int x)
{e[idx] = x;ne[idx] = head;head = idx;idx ++;
}//将x插入到下标是k的结点的后面
void add(int k, int x)
{e[idx] = x;ne[idx] = ne[k];ne[k] = idx;idx++;
}//将下标是k的点后面的点删掉
void remove(int k)
{ne[k] = ne[ne[k]];}
int main()
{int m;cin >> m;init();while(m --){int k,x;char op;cin >> op;if(op == 'H'){cin >> x;add_to_head(x);}else if (op == 'D'){cin >> k;if(!k) head = ne[head];remove(k-1);}else {cin >> k >> x;add(k-1, x);}}for(int i = head; i!= -1; i = ne[i]) cout << e[i]<< " ";cout << endl;return 0;}
二、双链表
![](https://img-blog.csdnimg.cn/img_convert/f9328b5b173e407f8e9b292dba1949c8.png)
例题:
实现一个双链表,双链表初始为空,支持 5 种操作:
在最左侧插入一个数;
在最右侧插入一个数;
将第 k 个插入的数删除;
在第 k 个插入的数左侧插入一个数;
在第 k 个插入的数右侧插入一个数
现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。
注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。
输入格式
第一行包含整数 M,表示操作次数。
接下来 M 行,每行包含一个操作命令,操作命令可能为以下几种:
L x,表示在链表的最左端插入数 x。
R x,表示在链表的最右端插入数 x。
D k,表示将第 k 个插入的数删除。
IL k x,表示在第 k 个插入的数左侧插入一个数。
IR k x,表示在第 k 个插入的数右侧插入一个数。
输出格式
共一行,将整个链表从左到右输出。
数据范围
1≤M≤100000
所有操作保证合法。
输入样例:
10
R 7
D 1
L 3
IL 2 10
D 3
IL 2 7
L 8
R 9
IL 4 7
IR 2 2
输出样例:
8 7 7 3 2 9
代码:
#include <iostream>using namespace std;const int N = 100010;int m;
int e[N], l[N], r[N], idx;//初始化
void init()
{// 0表示左端点点 1表示右端点r[0] = 1, l[1] = 0;idx = 2;}// 第k个插入的数右侧插入一个数
void add(int k, int x)
{e[idx] = x;r[idx] = r[k];l[idx] = k;l[r[k]] = idx;r[k] = idx;idx++;}//删除第k个点
void remove(int k)
{r[l[k]] = r[k];l[r[k]] = l[k];
}int main()
{init();cin >> m;while(m --){int k, x;string op;cin >> op;if(op == "L"){cin >> x;add(0, x);}else if(op == "R"){cin >> x;add(l[1], x);}else if(op == "D"){cin >> k;remove(k+1);}else if(op == "IL"){cin >> k >> x;add(l[k+1], x);}else {cin >> k >> x;add(k+1, x);}}for (int i=r[0]; i!= 1; i = r[i]) cout << e[i] << ' ';cout << endl;return 0;
}
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/f9328b5b173e407f8e9b292dba1949c8.png)
【算法基础】链表
一、单链表例题:实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数;删除第 k个插入的数后面的数;在第 k� 个插入的数后插入一个数。现在要对该链表进行 M次操作,进行完所…...
![](https://img-blog.csdnimg.cn/b5471d54472a44daa356d613101dbfa2.png)
[AUTOSAR][Fls模块] Flash Driver Module
Flash Driver Module--jianqiang.xue一、 简介二、 措施方式一:将FLASH操作程序作为Bootloader组件的一部分固化在存储器中方式二:通过通讯口将该部分代码从上位机下载到指定的RAM方式三:将Flash功能函数作为数据运行(推荐!&#…...
![](https://img-blog.csdnimg.cn/img_convert/daa85cc12cbff468fa28b7399f870fff.jpeg)
如何正确选择好用的投票平台微信公众平台投票链接链接投票平台
“年度人物楷模”网络评选投票_免费链接投票_作品投票通道_扫码投票怎样进行现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户发…...
![](https://img-blog.csdnimg.cn/img_convert/9e144804e9ab8d53964081b8e03cf908.png)
gocd部署应用
产品需要在多个环境部署测试,为了提高部署测试效率,故计划使用CD工具,jenkins确实足够强大,但是使用部署功能是需要安装插件的,再说自己本身只用部署功能,故决定找一个小巧的CD工具,经过一番查找…...
![](https://img-blog.csdnimg.cn/08c10ad5eca54e6ba6cd060d64c5bebd.png)
P2P视频聊天技术分析
整个P2P视频过程需要知道双方的媒体类型、流和候选者,所以这里就会用到一下技术: 信令服务器socket.io 状态机 ICE服务器 WebRTC框架 媒体协商 信令服务器Socket.io 信令服务器说白了作用就是发消息的中转站,A把msg发到…...
![](https://img-blog.csdnimg.cn/8502bf7c408841d2a313919149491d8b.png)
MyBatis 的一级、二级缓存机制
目录标题缓存什么是缓存为什么使用缓存什么样的数据能使用缓存,什么样的数据不能使用适用于缓存不适用于缓存MyBatis 一级缓存、二级缓存关系1. 一级缓存1.1 什么是一级缓存mybatis1.2 一级缓存配置1.3 什么情况下会命中一级缓存mybatis清除一级缓存的几种方法1.4 内…...
![](https://www.ngui.cc/images/no-images.jpg)
剑指 Offer 65. 不用加减乘除做加法
摘要 剑指 Offer 65. 不用加减乘除做加法 一、位运算 有符号整数通常用补码来表示和存储,补码具有如下特征: 正整数的补码与原码相同;负整数的补码为其原码除符号位外的所有位取反后加 11。可以将减法运算转化为补码的加法运算来实现。符…...
![](https://www.ngui.cc/images/no-images.jpg)
5年软件测试年薪30w+,我的坎坷之路谁又知道
在深圳做了五年软件测试工作,从之前的一脸懵的点点点,到现在会自动化测试,说一点点非计算机专业人员从事软件测试的心得体会,仅供参考交流。 大部分测试在公司没啥地位,当然如果你懂技术就还行,单纯点点点…...
![](https://img-blog.csdnimg.cn/6dd11855af644d9c97dea427243e24d2.png)
【Opencv--自适应图像二值化】cv2.adaptiveThreshold()
【Opencv–adaptiveThreshold】自适应阈值图像二值化 文章目录【Opencv--adaptiveThreshold】自适应阈值图像二值化1. 介绍2. adaptiveThreshold函数2.1 函数调用2.2 补充说明3. 代码示例4. 效果4.1 原图(ori.img)4.2 处理后5. 参考1. 介绍 在这里 cv2.…...
![](https://img-blog.csdnimg.cn/img_convert/9b66939be6cf4625bb425f28edf9ca18.png)
洛谷P8601[蓝桥杯][2013年第四届真题]剪格子
题目描述如图 11 所示,33 的格子中填写了一些整数。我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是 60。本题的要求就是请你编程判定:对给定的 mn 的格子中的整数,是否可以分割为两个部分,使…...
![](https://www.ngui.cc/images/no-images.jpg)
配置alias实现快速生成.gitignore文件
git工具:版本控制开发工具。 cscope工具:用于浏览C源码的工具,类似于ctags。在代码根目录下执行cscope -Rbq,然后产生三个索引文件(cscope.out、cscope.in.out和cscope.po.out三个文件)。 在Linux下使用vi…...
![](https://img-blog.csdnimg.cn/2aadb15bad8d4c4d83bf1e037e3c8f0f.png)
MySQL数据库调优————GROUP BY及DISTINCT优化
GROUP BY 三种处理GROUP BY的方式 松散索引扫描(Loose Index Scan)紧凑索引扫描(Tight Index Scan)临时表(Temporary table) 三种方式的性能一次递减 松散索引扫描 无需扫描满足条件的所有索引键即可返…...
![](https://www.ngui.cc/images/no-images.jpg)
LRU缓存算法
双向链表哈希表(非线程安全) https://leetcode.cn/problems/lru-cache/solutions/259678/lruhuan-cun-ji-zhi-by-leetcode-solution/ /*** LRU算法: 哈希表双向链表实现* 1. 双向链表按照被使用的顺序来存储, 靠近头部的节点是最近使用的, 靠近尾部的节…...
![](https://www.ngui.cc/images/no-images.jpg)
@Configuration注解
Configuration注解介绍 Configuration注解,用于标注一个类是一个spring的配置类(同时,也是一个bean),配置类中可以使用ComponentScan、Import、ImportResource 和 Bean等注解的方式定义beanDefinition。 Target(Elem…...
![](https://img-blog.csdnimg.cn/img_convert/03d930fe4fd42bda396e189aac5162eb.png)
基于springboot+vue的食疗系统
基于springbootvue的食疗系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍&…...
![](https://img-blog.csdnimg.cn/435b5be1432043e3956390bf766773c0.png)
sklearn学习-朴素贝叶斯
文章目录一、概述1、真正的概率分类器2、sklearn中的朴素贝叶斯二、不同分布下的贝叶斯1、高斯朴素贝叶斯GaussianNB2、探索贝叶斯:高斯朴素贝叶斯擅长的数据集3、探索贝叶斯:高斯朴素贝叶斯的拟合效果与运算速度总结一、概述 1、真正的概率分类器 算法…...
![](https://img-blog.csdnimg.cn/45bfe7b5eb0542f998160a4134cd907b.jpeg)
分享112个HTML艺术时尚模板,总有一款适合您
分享112个HTML艺术时尚模板,总有一款适合您 112个HTML艺术时尚模板下载链接:https://pan.baidu.com/s/1D3-mfPOud-f3vy9yLl-bmw?pwdfph2 提取码:fph2 Python采集代码下载链接:采集代码.zip - 蓝奏云 时尚平面模特网站模板 潮…...
![](https://www.ngui.cc/images/no-images.jpg)
用GDB远程调试运行于QEMU的程序
1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 测试环境 本文使用 Ubuntu 16.04.4 LTS QEMU 环境进行调试。 3. 用 GDB 调试 QEMU 内程序 3.1 编写用来调试的程序 我们用 ARM32 来进行调试…...
![](https://img-blog.csdnimg.cn/29bbf845390248bb827d571743d5c94f.png)
20 堆排序
文章目录1 堆排序的概念2 堆排序基本思想3 堆排序步骤图解说明4 堆排序的代码实现1 堆排序的概念 1) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn)…...
![](https://img-blog.csdnimg.cn/6e6e185e352248529350b2b28a8b5e5c.png)
2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享 很多时候,我们都想将一些文件或文本传送给别人,或者跨端传递一些信息,但是我们又不…...
![](https://www.ngui.cc/images/no-images.jpg)
分片策略(二)
分片策略 基本概念 分片键 用于分片的字段,是将数据库或表拆分的字段,比如,我可以使用user_id作为分片键将用户数据分到不同的表中,这里的user_id就是分片键,除了这种单字段分片,ShardingSphere还支持多…...
![](https://img-blog.csdnimg.cn/867a269cfc8d477d96be9ae28aa312aa.png)
Qt之调色板类QPalette的使用
文章目录QPalette调色板类前言代码知识点讲解QPalette调色板类 前言 Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照…...
![](https://img-blog.csdnimg.cn/7388fc9f642243ecaec1d89e48334179.png)
Kotlin 32. Kotlin 多语言支持
Kotlin 多语言支持 对于 Kotlin 来说,当我们新建一个项目时,会默认在 values/ 文件夹下,生成一个 strings.xml 文件。比如说, <resources><string name"app_name">exampleNewProject</string> <…...
![](https://img-blog.csdnimg.cn/img_convert/c7913e361b09e471aea477ea5122070a.png)
【Flutter入门到进阶】Dart进阶篇---DartVM单线程设计原理
1 虚拟机的指令执行设计 1.1 虚拟机的分类 基于栈的虚拟机,比如JVM虚拟机 基于寄存器的虚拟机,比如Dalvik虚拟机 1.2 虚拟机的概念 首先问一个基本的问题,作为一个虚拟机,它最基本的要实现哪些功能? 他应该能够模拟…...
![](https://www.ngui.cc/images/no-images.jpg)
Dem和NvM(NVRAM Manager)的交集
NVRAM(NvM)提供了在NVRAM中存储数据Block的机制。 NVRAM Block(最大大小取决于配置)被分配给Dem,并由Dem实现事件状态信息和相关数据的永久存储(例如通电复位)。 ECU 状态管理器(Ec…...
![](https://www.ngui.cc/images/no-images.jpg)
AI神经网络CNN/RNN/DNN/SNN的区别对比
@版权声明: 本文由 ChatGpt 创作; BiliBili: https://www.bilibili.com/video/BV17D4y1P7pM/?share_source=copy_web&vd_source=6d217e0ff6387a749dc570aba51d36fd 引言 随着人工智能技术的发展,神经网络作为人工智能的核心技术之一,被广泛应用于图像识别、语音识别、…...
![](https://img-blog.csdnimg.cn/74e994f9715a4b5bbb6290219eeab7c5.png#pic_center)
【JavaWeb】一文学会JPA
✅✅作者主页:🔗孙不坚1208的博客 🔥🔥精选专栏:🔗JavaWeb从入门到精通(持续更新中) 📋📋 本文摘要:本篇文章主要介绍JPA的概念、注解实现ORM规范…...
![](https://img-blog.csdnimg.cn/6bb48ab828a44ca1a4c59e7a67d65305.png)
【安卓逆向】APK修改与反编译回编译
【安卓逆向】反编译修改APK回编译使用工具流程步骤Apktool相关安装与使用常用命令备查APK签名命令备查实战练习反编译查看修改的地方使用Apktool反编译得到产物文件夹并进行修改回编APK实用场景在日常开发我们可能需要替换某些资源或者修改某些代码,但是我们没有源码…...
![](https://www.ngui.cc/images/no-images.jpg)
【计组笔记04】计算机组成原理之多模块存储器、Cache高速缓存存储器、Cache地址映射
这篇文章,主要介绍计算机组成原理之多模块存储器、Cache高速缓存存储器、Cache地址映射。 目录 一、双口RAM和多模块存储器 1.1、存取周期 1.2、双口RAM 1.3、多模块存储器...
![](https://www.ngui.cc/images/no-images.jpg)
英语基础-状语的应用
1. 非谓语动词作状语 1. 试着翻译下列句子 当他是一个小孩子的时候,他很喜欢玩电脑游戏。 When he was a child, he liked playing computer games. 如果他通过考试,他妈妈就会给他买一台新电脑。 If he passes the examination, his mother will b…...
![](https://images2017.cnblogs.com/blog/521153/201710/521153-20171013224408184-1432342371.png)
潜江 网站建设/2345网止导航
spring是一个很有名的java开源框架,作为一名javaer还是有必要了解spring的设计原理和机制,beans、core、context作为spring的三个核心组件。而三个组件中最重要的就是beans组件了。 从一个简单实例来查看spring加载配置文件中的bean。 public class Stud…...
![](/images/no-images.jpg)
建建建设网站公司电话号码/开发网站建设公司
常用控件和类的使用 Visual Studio.Net(简称VS.Net)使用控件(组件)设计Windows应用程序。将VS.Net工具箱窗口中的控件放到窗体中,使用属性窗口改变控件属性,或在程序中用语句修改控件属性,设计应用程序界面,为控件增加事件函数&am…...
![](https://img-blog.csdnimg.cn/img_convert/01149d11a98615204346eb5a565187e4.png)
做机械设计图纸找什么网站?/国外浏览器搜索引擎入口
学习电脑快捷键能够为我们的工作大大提升工作效率,但是由于电脑快捷键过多,很难记住这些电脑快捷键,我们只需记住一些常用的快捷键即可。那么电脑有哪些常用快捷键?我们整理了70个电脑常用的快捷键大全,来看看吧。Word…...
![](/images/no-images.jpg)
网站开发文档模板下载/seo基础教程视频
sudo su exit ulimit -c unlimited ulimit -a ./debugExe ls -al coregdb ./debugExe core...
![](/images/no-images.jpg)
ghost系统怎么卸载wordpress/百度推广一年大概需要多少钱
B) 寻址方式种类尽量多,指令功能尽可能强。C)选取使用率高的一些简单指令,以及很有用但不复杂的指令。D)增加寄存器数目,尽量减少访存操作。36、14、移位操作中移出的位存入()A零标志位 B 溢出标志位 C 进位标志位 D 符号位37、15、零地址指令…...
![](/images/no-images.jpg)
什么牛网站建设/seo搜索引擎优化排名报价
1.创建一个环境anaconda安装完成后,创建一个环境在windows下,如果配置了环境变量,可以直接的在命令行中如果没配置环境变量,打开Anaconda Prompt,找不到可以Wins在搜索框里搜索在Linux下,安装完成后应该自动…...