AcWing 827. 双链表(C++)
目录
1.题目描述
2.AC
1.题目描述
827. 双链表
实现一个双链表,双链表初始为空,支持 55 种操作:
- 在最左侧插入一个数;
- 在最右侧插入一个数;
- 将第 kk 个插入的数删除;
- 在第 kk 个插入的数左侧插入一个数;
- 在第 kk 个插入的数右侧插入一个数
现在要对该链表进行 MM 次操作,进行完所有操作后,从左到右输出整个链表。
注意:题目中第 kk 个插入的数并不是指当前链表的第 kk 个数。例如操作过程中一共插入了 nn 个数,则按照插入的时间顺序,这 nn 个数依次为:第 11 个插入的数,第 22 个插入的数,…第 nn 个插入的数。
输入格式
第一行包含整数 MM,表示操作次数。
接下来 MM 行,每行包含一个操作命令,操作命令可能为以下几种:
L x
,表示在链表的最左端插入数 xx。R x
,表示在链表的最右端插入数 xx。D k
,表示将第 kk 个插入的数删除。IL k x
,表示在第 kk 个插入的数左侧插入一个数。IR k x
,表示在第 kk 个插入的数右侧插入一个数。
输出格式
共一行,将整个链表从左到右输出。
数据范围
1≤M≤1000001≤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
2.AC
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e5+10;
int m;
int idx, e[N], l[N], r[N];
void init () {r[0] = 1;l[1] = 0;idx = 2;
}
void add_to_right(int x) {e[idx] = x;l[idx] = l[1];r[idx] = 1;r[l[1]] = idx;l[1] = idx++;
}
void remove (int k) {r[l[k]] = r[k];l[r[k]] = l[k];
}
void add(int k, int x) {e[idx] = x;l[idx] = k;r[idx] = r[k];l[r[k]] = idx;r[k] = idx++;
}
int main () {init();scanf("%d", &m);for (int i = 0; i < m; i++) {char ch[2];cin>>ch;if (ch[0] == 'L') {int x;scanf("%d", &x);add(0, x);} else if (ch[0] == 'R') {int x;scanf("%d", &x);add(l[1], x);} else if (ch[0] == 'D'){int k;scanf("%d", &k);remove(k+1);} else if (ch[1] == 'L') {int k, x;scanf("%d%d", &k, &x);add(l[k+1], x);} else {int k, x;scanf("%d%d", &k, &x);add(k+1, x);}}for (int i = r[0]; i != 1; i = r[i]) {printf("%d ", e[i]);}return 0;
}
AcWing 827. 双链表(C++)相关推荐
- [AcWing]827. 双链表(C++实现)双链表模板题
[AcWing]827. 双链表(C++实现)双链表模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. 题 ...
- AcWing 827. 双链表
题目连接 https://www.acwing.com/problem/content/829/ 思路 和单链表类似,只不过,我们这里使用0当作头节点,1当作尾节点,所以,我们真正的节点是从2开始的 ...
- 数据结构02 827. 双链表(DAY 38)
文章目录 原题题目 代码实现 原题题目 代码实现 #include<iostream> #include<algorithm>using namespace std;const ...
- 数组实现链表和双链表
链表 链表是一种线性表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成 ...
- Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP
单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...
- 算法基础—数据结构—双链表
双链表顾名思义就是一个从左到右的指针和一个从右到左的指针. 这里列一些模板 // e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点 int e[N], ...
- c++实现双链表基本操作详解
本人是来自双非本科的一只大一菜鸟,加入校队(我是吊车尾┭┮﹏┭┮)已有一个月的时间,现在开始写我的第一篇博客记录我的学习历程,废话不多说,如理解有误,请勘正. int r[N],l[N],e[N],i ...
- Go 学习笔记(80)— Go 标准库 container/list(单链表、双链表)
列表是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系.列表有多种实现方法,如单链表.双链表等. 在 Go 语言中,将列表使用 container/list 包来实现,内部 ...
- 利用“哨兵”“实现双链表
利用"哨兵""实现双链表 下面的代码用一个"哨兵"实现双链表,感觉很简洁,中间也有点绕,暂时实现,供学习之用 static Node list_han ...
最新文章
- python之路之面向对象3
- 把激光雷达放在iPad上是怎样的体验?看到“测距仪”App的效果我震惊了
- python与人工智能编程-总算明白python人工智能编程入门案例
- 【OpenGL】四、Visual Studio 2019 配置 GitHub ( 从 GitHub 上克隆项目 )
- Java集合ArrayList
- 伟大公司为什么需要技术型领导?
- 用python实现单例模式_Python单例模式的两种实现方式
- linux下u盘的使用
- MongoDBTool-最新进展报告
- 2017-本命年总结
- silk lobe资源公众号_微小说全免费阅读公众号阅读网资源推荐
- java私塾跟我学系列_java 私塾作业
- Hbase 详细介绍以及简单的Hbase命令操作(入门必备)
- 网络安全工具100强介绍与下载
- 软件工程-第三章-需求分析
- 【批量身份证图片识别】如何批量OCR识别身份证图片或复印件并导出至excel表格或文本格式,下面教你方法
- OpenCV 直方图计算
- 坚果云+Markor+Typora实现多平台Markdown协同编辑
- I.MX6 AW-NB177NF wifi HAL 调试修改
- 以题促学01_matplotlib画图_分别用subplots和subplot,add_subplot3种方法画组合图