AcWing 826. 单链表

2023-10-27

题目

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

(1) 向链表头插入一个数;

(2) 删除第k个插入的数后面的数;

(3) 在第k个插入的数后插入一个数

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

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

输入格式:

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

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

(1) “H x”,表示向链表头插入一个数x。

(2) “D k”,表示删除第k个插入的数后面的数(当k为0时,表示删除头结点)。

(3) “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

思路分析:

插入可达到 O ( 1 ) O(1) O(1)的复杂度,注意插入和删除的过程是a - 1,(插入第一个点的下标为0则插入第k个点的下标为k-1,即插入k-1后面的一个结点,要注意在删除的过程要特判删除头结点if(a == 0) head = ne[head])。

代码:

#include <iostream>

using namespace std;

const int maxn = 100010;

//头结点下标,当前节点下标,当前结点的值,next的结点的下标
int head, idx, e[maxn], ne[maxn];

//初始化
void init(){
    head = -1;
    idx = 0;
}

//在链表头插入一个数
void insert2head(int x){
    e[idx] = x, ne[idx] = head, head = idx++;
}
//在第k个数后面插入一个数
void insert2k(int k, int x){
    e[idx] = x, ne[idx] = ne[k], ne[k] = idx++;
}
//将头结点删除需要保证头结点的存在
void removek(int k){
    ne[k] = ne[ne[k]];
}

int main(){
    int m, a, b;
    cin >> m;
    init();
    while(m--){
        char op;
        cin >> op;
        if(op == 'H'){
            cin >> a;
            insert2head(a);
        }else if(op == 'D'){
            cin >> a;
            if(a == 0) head = ne[head];
            removek(a - 1);
        }else if(op == 'I'){
            cin >> a >> b;
            insert2k(a - 1, b);
        }
    }
    for(int i = head; i != -1; i = ne[i]) cout << e[i] << " ";
    cout << endl;
    return 0;
}

AcWing题解
题目链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AcWing 826. 单链表 的相关文章

随机推荐

  • python下使用unrar出现错误的问题

    首先说一下我的系统和Python版本信息 win7 python2 7 12 我找了两篇个人认为比较好的文章 第一篇http blog csdn NET luoye7422 article details 41873499 按照他的方法来确
  • OpenFeign基础应用以及Sentinel整合OpenFeign使用

    OpenFeign基础应用 概念 OpenFeign是一种声明式 模板化的HTTP客户端 在Spring Cloud中使用OpenFeign 可以做到使用HTTP请求访问远程服务 就像调用本地方法一样的 开发者完全感知不到这是在调用远程方法
  • Spring 学习笔记03 - AOP

    目录 AOP 概述 AOP 是什么 AOP 相关术语 基于 XML 配置 AOP 简单实现 AOP 的配置步骤 基于注解配置 AOP 需要用到的新注解 简单实现 使用注解配置 AOP 的 bug AOP 概述 AOP 是什么 AOP Asp
  • 面阿里P6需要掌握的部分技术

    Java集合 HashMap和ConcurrentHashMap 平时最好有读一些源码 最好知道每个参数为什么设置成这么大 有什么好处 JUC包肯定要学 即使平时的编程根本不用 也必须得会 至少要知道aba cas aqs unsafe v
  • 分布式锁之Zookeeper实现

    ZooKeeper 有四种节点类型 持久节点 持久顺序节点 临时节点 临时顺序节 利用 ZooKeeper 支持临时顺序节点的特性 可以实现分布式锁 当客户端对某个方法加锁时 在 ZooKeeper 中该方法对应的指定节点目录下 生成一个唯
  • python中object的方法——魔法方法

    正如java有个顶级类Object一样 Object类提供了hashCode equals toString等一系列方法 那么python中的object也是一样 并且这些方法感觉上会更强大 更灵活 本文仅做一个总结 方便日后查阅 slot
  • HDFS上创建文件、写入内容

    1 创建文件 hdfs dfs touchz aaa aa txt 2 写入内容 echo
  • 微信小程序开发步骤详解

    微信小程序开发步骤详解 目标 开发前准备 微信开发者工具 第一个小程序项目 小程序的目录结构 样式及相应式布局 小程序事件 小程序配置 01账号申请 目标 掌握小程序账号申请流程 小程序的概念 小程序是一种不需要下载 安装即可使用的应用 它
  • Python一行代码过滤标点符号等特殊字符

    本文首发于公众号 AntDream 欢迎微信搜索 AntDream 或扫描文章底部二维码关注 和我一起每天进步一点点 很多时候我们需要过滤掉标点符号等特殊字符 网上虽然有一堆的方法 但是都没有找到一个非常满意的 有些过滤不了中文的标点符号
  • CICD详解(十五)——Jenkins插件安装失败解决

    今天继续给大家介绍Linux运维相关知识 本文主要内容是Jenkins插件安装失败解决 一 背景 今天 在做Jenkins上安装Git和Gitlab插件时 插件的安装出现了问题 结果如下所示 经过我的研究和实验 对Jenkins插件安装失败
  • 【算法】Java 中栈的使用

    栈是一种重要的数据结构 满足后进先出 是面试中会重点考察的内容 下面通过例题来学习栈的使用 1 力扣20 有效的括号 1 给定一个只包括 的字符串 s 判断字符串是否有效 有效字符串需满足 左括号必须用相同类型的右括号闭合 左括号必须以正确
  • 软件中常用的反义词组

    软件中常用的反义词组 add remove begin end create destroy insert delete first last g et release increment decrement put get add del
  • 软件项目中的成本构成及估算方法

    随着知识经济 信息时代的来临 计算机软件业迅猛发展 商品化 资本化 资产化的计算机软件的价值 评估的社会需求也日益增多 而且有越来越多的趋势 由于系统软件通常是一些规模大 复杂程度高的人一 机系统 因此 系统软件的开发 使用 维护 管理的过
  • linux安装.AppImage后缀安装包

    假设有个安装包名称为 myinstall AppImage 添加权限后直接可以运行 chmod a x myinstall AppImage myinstall AppImage
  • ubuntu18 新增配置用户删除用户

    进入root用户 sudo su 输入密码 新安装的ubuntu修改root用户密码 sudo passwd 输入密码 useradd 命令格式 命令一 这种命令会在登录界面显示用户名 sudo useradd m ftpuser d ho
  • 安卓手机玩游戏卡顿怎么解决_和平精英:你还在为游戏卡顿掉帧而烦恼吗?5招之内帮你解决...

    相信大家在玩和平精英时必然会遇到游戏卡顿的现象吧 想要解决这些问题吗 赤几现在就来教你哟 在上个游戏版本的时候 不少小伙伴在玩和平精英的时候遇到人会出现画面掉帧很厉害的情况 一般只要卡了就说明附近有人了 但最近的更新中 官方尽可能的优化了这
  • Excel批量创建带超链接的工作表目录

    工作中总会遇到包含多个工作表的工作簿 很多人都在想这时候如果能有一个目录 不但能显示出所有的工作表名称 还能够链接跳转到指定的工作表 该有多好呀 于是 一些勤奋的人们就开始行动了 他们手动创建超链接指向各个工作表 但当工作表数量很多时 手动
  • 2023华为od机试 Python【拔河比赛】

    前言 本题使用Python解答 如果需要Java代码 请参考以下链接 点我 题目 我们需要为拔河比赛挑选人选 挑选规则如下 1首先按身高排序 然后按体重排序 2 选出10个最合适的人选 输入是一个数组 数组存储的是所有人员的身高 体重信息
  • vue项目的简体繁体切换

    vue项目的简体繁体切换 在项目中有这样的一个需求 需要对APP内的字体进行简体和繁体的切换 一开始在项目中下载引入了vue i18n的语言包 但是有个缺点就是i18n语言包不能对接口返回的字体进行转换 还有的就是只能实现部分字体的转换 工
  • AcWing 826. 单链表

    题目 实现一个单链表 链表初始为空 支持三种操作 1 向链表头插入一个数 2 删除第k个插入的数后面的数 3 在第k个插入的数后插入一个数 现在要对该链表进行M次操作 进行完所有操作后 从头到尾输出整个链表 注意 题目中第k个插入的数并不是