目录

1.题目描述

2.AC


1.题目描述

827. 双链表

实现一个双链表,双链表初始为空,支持 55 种操作:

  1. 在最左侧插入一个数;
  2. 在最右侧插入一个数;
  3. 将第 kk 个插入的数删除;
  4. 在第 kk 个插入的数左侧插入一个数;
  5. 在第 kk 个插入的数右侧插入一个数

现在要对该链表进行 MM 次操作,进行完所有操作后,从左到右输出整个链表。

注意:题目中第 kk 个插入的数并不是指当前链表的第 kk 个数。例如操作过程中一共插入了 nn 个数,则按照插入的时间顺序,这 nn 个数依次为:第 11 个插入的数,第 22 个插入的数,…第 nn 个插入的数。

输入格式

第一行包含整数 MM,表示操作次数。

接下来 MM 行,每行包含一个操作命令,操作命令可能为以下几种:

  1. L x,表示在链表的最左端插入数 xx。
  2. R x,表示在链表的最右端插入数 xx。
  3. D k,表示将第 kk 个插入的数删除。
  4. IL k x,表示在第 kk 个插入的数左侧插入一个数。
  5. 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++)相关推荐

  1. [AcWing]827. 双链表(C++实现)双链表模板题

    [AcWing]827. 双链表(C++实现)双链表模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. 题 ...

  2. AcWing 827. 双链表

    题目连接 https://www.acwing.com/problem/content/829/ 思路 和单链表类似,只不过,我们这里使用0当作头节点,1当作尾节点,所以,我们真正的节点是从2开始的 ...

  3. 数据结构02 827. 双链表(DAY 38)

    文章目录 原题题目 代码实现 原题题目 代码实现 #include<iostream> #include<algorithm>using namespace std;const ...

  4. 数组实现链表和双链表

    链表 链表是一种线性表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成 ...

  5. Acwing算法基础课学习笔记(四)--数据结构之单链表双链表模拟栈模拟队列单调栈单调队列KMP

    单链表 算法题中最常考的单链表就是邻接表(用来存储图和数),比如最短路问题,最小生成树问题,最大流问题.双链表用于优化某些问题. 利用数组来表达单链表:存储值和指针的两个数组利用下标进行关联. 需要注 ...

  6. 算法基础—数据结构—双链表

    双链表顾名思义就是一个从左到右的指针和一个从右到左的指针. 这里列一些模板 // e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点 int e[N], ...

  7. c++实现双链表基本操作详解

    本人是来自双非本科的一只大一菜鸟,加入校队(我是吊车尾┭┮﹏┭┮)已有一个月的时间,现在开始写我的第一篇博客记录我的学习历程,废话不多说,如理解有误,请勘正. int r[N],l[N],e[N],i ...

  8. Go 学习笔记(80)— Go 标准库 container/list(单链表、双链表)

    列表是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系.列表有多种实现方法,如单链表.双链表等. ​ 在 Go 语言中,将列表使用 container/list 包来实现,内部 ...

  9. 利用“哨兵”“实现双链表

    利用"哨兵""实现双链表 下面的代码用一个"哨兵"实现双链表,感觉很简洁,中间也有点绕,暂时实现,供学习之用 static Node list_han ...

最新文章

  1. python之路之面向对象3
  2. 把激光雷达放在iPad上是怎样的体验?看到“测距仪”App的效果我震惊了
  3. python与人工智能编程-总算明白python人工智能编程入门案例
  4. 【OpenGL】四、Visual Studio 2019 配置 GitHub ( 从 GitHub 上克隆项目 )
  5. Java集合ArrayList
  6. 伟大公司为什么需要技术型领导?
  7. 用python实现单例模式_Python单例模式的两种实现方式
  8. linux下u盘的使用
  9. MongoDBTool-最新进展报告
  10. 2017-本命年总结
  11. silk lobe资源公众号_微小说全免费阅读公众号阅读网资源推荐
  12. java私塾跟我学系列_java 私塾作业
  13. Hbase 详细介绍以及简单的Hbase命令操作(入门必备)
  14. 网络安全工具100强介绍与下载
  15. 软件工程-第三章-需求分析
  16. 【批量身份证图片识别】如何批量OCR识别身份证图片或复印件并导出至excel表格或文本格式,下面教你方法
  17. OpenCV 直方图计算
  18. 坚果云+Markor+Typora实现多平台Markdown协同编辑
  19. I.MX6 AW-NB177NF wifi HAL 调试修改
  20. 以题促学01_matplotlib画图_分别用subplots和subplot,add_subplot3种方法画组合图

热门文章

  1. 通过配置为数据库表维护视图,同时创建事务码
  2. SE Springer小组《Spring音乐播放器》可行性研究报告一、二
  3. 吉林市职称计算机考试,吉林人事考试网
  4. 企业应用架构之业务逻辑层的顶层设计与底层思考
  5. 一次网络反诈骗真人秀
  6. 黑*头条_第5章_延迟任务精准发布文章(新版)
  7. 分享微信公众号运营助手,可以在手机上回复粉丝留言
  8. 如何制作精美的微信电子画册?超容易上手的详细攻略,全在这里!
  9. 6、XPOSED二、叉叉助手框架--用XPOSED实现
  10. 录制屏幕怎么设置区域?分享你个小操作