当前位置: 首页 > news >正文

题解:AcWing 826 单链表

【题目来源】

AcWing:826. 单链表 - AcWing题库

【题目描述】

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

  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\))。

【输出】

共一行,将整个链表从头到尾输出。

【输入样例】

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

【解题思路】

image

【算法标签】

《AcWing 826 单链表》 #链表#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 100010;  // 定义链表最大容量// 全局变量定义
int head;      // 头结点下标,初始为-1表示空链表
int e[N];      // e[i]存储节点i的值
int ne[N];     // ne[i]存储节点i的下一个节点下标
int idx;       // 当前可用节点索引,从0开始/*** 初始化链表*/
void init()
{head = -1;  // 头指针初始化为-1idx = 0;    // 从0开始分配节点
}/*** 在链表头部插入节点* @param x 要插入的值*/
void add_to_head(int x)
{e[idx] = x;     // 存储节点值ne[idx] = head; // 新节点指向原头节点head = idx;     // 更新头指针idx++;          // 分配下一个可用节点
}/*** 在指定位置后插入节点* @param k 要插入的位置前驱节点下标* @param x 要插入的值*/
void add(int k, int x)
{e[idx] = x;      // 存储节点值ne[idx] = ne[k]; // 新节点指向原k节点的下一个节点ne[k] = idx;     // k节点指向新节点idx++;           // 分配下一个可用节点
}/*** 删除指定位置后的节点* @param k 要删除的位置前驱节点下标*/
void remove(int k)
{ne[k] = ne[ne[k]];  // 跳过下一个节点,直接指向下下个节点
}int main()
{int m;  // 操作次数cin >> m;init();  // 初始化链表while (m--){char op;  // 操作类型int k, x; // 操作参数cin >> op;if (op == 'H') {// 头部插入操作cin >> x;add_to_head(x);}else if (op == 'D') {// 删除操作cin >> k;if (!k) head = ne[head];  // 特殊情况:删除头节点else remove(k - 1);   // 删除第k个节点后的节点}else {// 指定位置插入操作cin >> k >> x;add(k - 1, x);       // 在第k个节点后插入}}// 遍历输出链表for (int i = head; i != -1; i = ne[i])cout << e[i] << " ";cout << endl;return 0;
}

【运行结果】

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
http://www.jsqmd.com/news/399258/

相关文章:

  • 题解:AcWing 802 区间和
  • js获取html相邻标签
  • 题解:AcWing 803 区间合并
  • 计算机毕业设计 | SpringBoot+vue科研项目验收管理系统(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue毕业论文管理系统 高校文档项目答辩平台(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue中山社区医疗综合服务平台(附源码+论文)
  • Flink 任务失败恢复机制Restart Strategy 和 Failover Strategy 怎么配才“又稳又不炸”
  • Tauri 前端配置把任何前端框架“正确地”接进 Tauri(含 Vite/Next/Nuxt/Qwik/SvelteKit/Leptos/Trunk)
  • 计算机毕业设计 | SpringBoot+vue毕业设计答辩平台 校园成绩管理系统(附源码+论文)
  • Tauri 项目结构前端壳 + Rust 内核,怎么协作、怎么构建、怎么扩展
  • 抖音评论自动采集|拓客|免登录
  • 当Claude Code负责人说amp;quot;编程已解决amp;quot;,测试工程师该慌吗?
  • Claude Code 安装教程(macOS / Linux / Windows PowerShell 一键脚本)【2026 最新】
  • 题解:AcWing 801 二进制中1的个数
  • 寒假第二十天
  • 一文彻底搞懂强化学习
  • js XMLHttpRequest编程误区(复用这个对象导致的冲突问题)
  • 当Claude Code负责人说编程已解决,测试工程师该慌吗?
  • vue+springboot线上学生作业批改考试系统_6li288nu
  • pythonQT图书管理系统的进阶版本
  • vue+springboot基于线性回归的音乐推荐系统 爬虫 数据分析可视化大屏5
  • 一天一个Python库:httpcore - 异步HTTP核心库
  • vue+springboot基于聚类算法的美妆产品网络评价系统的化妆品爬虫数据采集与可视化分析系统
  • JAVA虚拟机-JVM
  • vue+springboot甜点蛋糕商城系统 团子烘焙销售服务系统
  • vue+springboot基于ai技术的学习资料分享平台
  • vue+springboot基于BS的中小企业商品进销存管理系统 数据分析可视化大屏系统 i59u2562
  • vue+springboot企业合同管理系统设计与实现 5c062cu7
  • vue+springboot城市供水管网爆管预警系统
  • vue+springboot人工智能AI问答时代个人计算机的安全防护科普系统