第二讲:数据结构 AcWing 826. 单链表

目录

    • 数组模拟链表
      • 数组模拟单链表
    • 单链表
    • 思路 && 代码 看图更好理解
    • 推荐一下y总的刷题网站

数组模拟链表

笔试的题目大部分 大部分涉及到链表都是十万级别的 用数组的方式创建链表速度很快,不会超时,而如果用new 一个结构体的话 大部分就是比较慢的 所以不建议使用

数组模拟单链表

单链表在笔试题中用的最多是 领接表
领接表最多的应用是存储数和图
双链表 最多的应用就是来优化某些问题

假设当前的节点
我们可以用e[N] 来表示当前节点的值是多少 用ne[N]来表示当前指针的下一个节点是多少
在这里插入图片描述
数据为
e[0 ] =3 ne[0] =1
e[1] = 5 ne[1] =2
e[2] =7 ne[2] =3
e[3] =9 ne[3] = -1
原题链接:

单链表

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

向链表头插入一个数;
删除第 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 存储当前已经用到了哪个点 每一次使用idx都可以理解成创建一个新的节点
int head, e[N], ne[N], idx;// 初始化
void init()
{head = -1; //head节点指向的-1 表示没有指向任何数据idx = 0;   //表示当前链表没有任何节点
}// 将x插到头结点
void add_to_head(int x)
{e[idx] = x,  		//表示当前节点的值为x ne[idx] = head,		//表示当前节点的下一个节点为头结点指向的节点head = idx ++ ; 	//表示头结点指向idx这个节点 并将idx +1 操作
}
//注意这里面的链表操作 都是需要往后看 不能往前看 因为单链表只能往后看齐
// 将x插到下标是k的点后面
void add(int k, int x)
{e[idx] = x, 		//表示当前节点(新创建的) 值为xne[idx] = ne[k], 	//表示当前节点的下一个节点 为第k个节点的下一个节点ne[k] = idx ++ ;	//表示第k个节点的下一个节点为当前节点idx 并将idx +1操作
}// 将下标是k的点后面的点删掉
void remove(int k)
{ne[k] = ne[ne[k]]; //表示第k个节点指向的下一个节点被修改为 下一个节点的下一个节点//这在工程里面就会导致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];else 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;
}

推荐一下y总的刷题网站

https://www.acwing.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Git 简易速速上手小册》第9章:Git 工作流程定制(2024 最新版)

文章目录 9.1 选择合适的工作流9.1.1 基础知识讲解9.1.2 重点案例&#xff1a;为中等规模的 Python 项目选择 Feature Branch 工作流9.1.3 拓展案例 1&#xff1a;适应 Gitflow 工作流的大型项目9.1.4 拓展案例 2&#xff1a;使用 Forking 工作流的开源 Python 项目 9.2 定制化…

【C++】【类和对象】拷贝构造函数

1.拷贝构造函数的特性&#xff1a; 1.拷贝构造函数用来构造一个与已存在对象一摸一样的对象 它只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存在的类类型对象创建新对象时由编译器自动调用。 2.拷贝构造函数是构造函数的一种重…

nginx简单配置四种携带/时的拼接关系

一、代理静态文件 1、 当 location 尾部有 /&#xff0c;且代理地址尾部也有 / 时&#xff1a;&#xff08;常用&#xff09; location /test11/ {root /usr/local/nginx/html/; } 则访问 http://ip/test11/aaa&#xff0c;实际访问的是/usr/local/nginx/html/aaa2、 当…

Flask 入门7:使用 Flask-Moment 本地化日期和时间

如果Web应用的用户来自世界各地&#xff0c;那么处理日期和时间可不是一个简单的任务。服务器需要统一时间单位&#xff0c;这和用户所在的地理位置无关&#xff0c;所以一般使用协调世界时&#xff08;UTC&#xff09;。不过用户看到 UTC 格式的时间会感到困惑&#xff0c;他们…

数据库-MySQL 实战项目——房屋租赁管理系统数据库设计与实现(附源码)

一、前言 需求&#xff1a; 房屋租赁管理系统主要完成功能为&#xff1a; 房屋信息管理出租者信息管理求租者信息管理房屋出租信息管理系统管理&#xff08;员工信息管理、绩效管理等&#xff09; 备注&#xff1a; 1. 一个房屋有多个求租者。&#xff08;一对多&#xff0…

【10秒极速开服】幻兽帕鲁全自动部署服务器教程

幻兽帕鲁太火了&#xff0c;官方palworld服务器不稳定&#xff1f;不如自建服务器&#xff0c;基于腾讯云幻兽帕鲁服务器成本32元全自动部署幻兽帕鲁服务器&#xff0c;超简单有手就行&#xff0c;全程自动化一键部署10秒钟即可搞定&#xff0c;无需玩家手动部署幻兽帕鲁游戏程…

Agile Initiative, Epic, and Story/Task

Stories, also called “user stories,” are short requirements or requests written from the perspective of an end user. stories are something the team can commit to finish within a one- or two-week sprint.Epics are large bodies of work that can be broken do…

网络流问题求解及Gurobi+Python代码(最大流/最小成本网络流/多商品网络流)

目录 1.最大流问题 1.1 问题描述 1.2 Ford-Fulkerson算法 1.3 Gurobi测试 2.最小成本网络流问题 2.1 问题描述 2.2 供应链规划案例 3.多商品网络流问题 3.1 问题描述及模型 3.2 Gurobi测试 Gurobi求解代码&#xff1a;GitHub - bujibujibiuwang/Network-Flow-Probl…

机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧

文章目录 1.K-近邻算法思想2.K-近邻算法(KNN)概念3.电影类型分析4.KNN算法流程总结5.k近邻算法api初步使用机器学习库scikit-learn1 Scikit-learn工具介绍2.安装3.Scikit-learn包含的内容4.K-近邻算法API5.案例5.1 步骤分析5.2 代码过程 1.K-近邻算法思想 假如你有一天来到北京…

代码随想录算法训练营第42天 | 01背包问题理论基础 + 416.分割等和子集

今日任务 01背包问题&#xff0c;你该了解这些&#xff01; 01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组 416. 分割等和子集 01背包问题 二维数组 理论基础&#xff1a;代码随想录 题目链接&#xff1a;题目页面 01 背包 有n件物品和一个最多能背重量为w 的…

【C++】组合数

题目描述 组合数表示的是从n个物品中选出m个物品的方案数。举个例子&#xff0c;从 (1, 2, 3) 三个物品中选择两个物品可以有 (1, 2)&#xff0c;(1, 3)&#xff0c;(2, 3) 这三种选择方法。 根据组合数的定义&#xff0c;我们可以给出计算组合数的一般公式&#xff1a; 其中…

C++ 日期计算器

日期计算器 概要 Date类的规划Date类的实现Date 构造函数Date 拷贝构造函数~Date 析构函数GetMonthDay 求某年某月的天数operator 赋值操作符重载operator 加等操作符重载operator 加号操作符重载operator- 减等操作符重载operator- 减法操作符重载 &#xff08;日期 - 天数&am…

2023年第四季度硬盘容量强势增长9%

在2023年第四季度&#xff08;CQ4 23&#xff09;&#xff0c;硬盘驱动器&#xff08;HDD&#xff09;市场的总容量出货量环比增长9%&#xff0c;达到214EB&#xff0c;而单位出货量保持在2900万块不变。其中&#xff0c;近线存储&#xff08;Nearline&#xff09;硬盘的容量出…

Java基于微信小程序的驾校报名小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

JVM双亲委派机制

双亲委派模型是一种组织类加载器之间关系的一种规范,他的工作原理是:如果一个类加载器收到了类加载的请求,它不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,这样层层递进,最终所有的加载请求都被传到最顶层的启动类加载器中,只有当父类加载器无法完成这个加载…

基于SSM的实习管理系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的实习管理系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

Verilog刷题笔记19

题目&#xff1a; A common source of errors: How to avoid making latches When designing circuits, you must think first in terms of circuits: I want this logic gate I want a combinational blob of logic that has these inputs and produces these outputs I want…

【高阶数据结构】B-树详解

文章目录 1. 常见的搜索结构2. 问题提出使用平衡二叉树搜索树的缺陷使用哈希表的缺陷 3. B-树的概念4. B-树的插入分析插入过程分析插入过程总结 5. B-树的代码实现5.1 B-树的结点设计5.2 B-树的查找5.3 B-树的插入实现InsertKey插入和分裂测试 6. B-树的删除&#xff08;思想&…

使用WPS制作三线表

点击边框和底纹点击1、2、3、4并且应用于表格点击确定 再次选中表格点击右键表格属性选择边框和底纹 选中表格第一行右键点击表格属性选择边框和底纹 如果表格中存在虚线

【Linux开发工具】gcc/g++的使用

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.前言2.gcc/g使用方…