Acwing 826. 单链表

题目描述

实现一个单链表,链表初始为空,支持三种操作:
向链表头插入一个数;
删除第 k个插入的数后面的数;
在第 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≤10000

思路

用 a 数组代表数据域 ,然后 ne 数存储的是指针域。
创建一个链表即创建一个头指针,head = -1;
然后存储的数据个数是 idx 初始化即为 0 ;
插入操作即将第 k 和数据后面插入一个 x : 首先创建节点 a[idx] = x ; 然后将指针指向k后面的节点 ne[idx] = ne[k] ;
k 的指针再指向新的节点 ne[k] = idx ++ (加一是因为这样就不用再写一个idx++);
删除操作,因为是静态链表,不需要释放资源,直接将的要删除的数的前一个指针指向后一个,ne[k] = ne[ne[k]];
如果是头指针即 head = ne[haed];
头插:类似于插入只是将 j 换成了head ,创建节点: a[idx] = x;
指针指向头指针指向的数据ne[idx] = head ,头指针指向head = idx++;

代码

#include<iostream>using namespace std;
const int N =100010;
int n,m;
int a[N] ,ne[N],idx,head;
void init()
{head  = -1 ;}
void head_push(int x)
{a[idx] = x;ne[idx] = head;head = idx ++;
}
void add(int k, int x)
{a[idx] = x;ne [idx] = ne[k] ;ne[k] = idx ++;
}
void remove (int k)
{ne[k] = ne [ne[k]];
}int main()
{cin>>n;init();int k,x;while(n--){char c ;int k,x;cin>>c;if( c == 'D'){cin>>k;if ( !k ) head = ne[head];else remove(k-1);} else if(c == 'H'){cin>>x;head_push(x);}else{cin>> k >> x;add(k-1,x);}}for (int i = head; i != -1; i = ne[i]) cout << a[i] << ' ';return 0;
}

for (int i = head; i != -1; i = ne[i]) cout << a[i] << ’ ';
return 0;
}

Acwing 826 .单链表相关推荐

  1. AcWing 826. 单链表

    题目连接 https://www.acwing.com/problem/content/828/ 思路 有点类似链式前向星建图,不同的是链式前向星是多链表的形式,这个只是单链表,我们的头节点标记为-1 ...

  2. [ACW]826.单链表

    题链 tips: 1.数组模拟单链表,快 2.一些边界条件的考虑出题人已经除去了 3.题意的理解 4.下标用来索引,指针,逻辑与物理的区别,每个元素插入时物理顺序(数组存储位置idx)已经固定 5.单 ...

  3. 第六讲 双指针、BFS与图论、单链表

    双指针 所有类似这样的算法都是双指针算法,时间复杂度为O(n) AcWing 1238. 日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有 N 行. 其中 ...

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

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

  5. 数组模拟单链表acwing826. 单链表

    文章目录 单链表一道题 数组模拟单链表模板 初始化链表 向表头插入数 在下标为k的节点的下一个位置插入节点 删除下标为k的节点的下一个节点 单链表一道题 单链表题目 实现一个单链表,链表初始为空,支持 ...

  6. AcWing 827. 双链表

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

  7. C++中LIstNode尾插法建立单链表

    @yogurt_ 在做Acwing 和力扣的编程时,经常有一个节点是ListNode,这里记录一下利用已有已知结构体根据输入利用尾插法创立单链表. 经过查阅资料,理解和最后实现如下: ListNode ...

  8. 【题解】【AcWing】1587. 链表重复数据删除

    1587. 链表重复数据删除 原题传送:AcWing 1587. 链表重复数据删除 给定一个单链表 LLL ,链表上的每个节点都存有一个键值,你应该删掉其中拥有重复键值绝对值的节点. 也就是说,对于每 ...

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

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

最新文章

  1. 手机WebAPP设计注意事项和解决方法
  2. word删除分节符后之前的格式乱了_毕业论文Word技巧小结
  3. 深入浅出解释FFT(七)——fft求频谱图和功率谱密度图
  4. matlab图片矢量化,matlab图形矢量化解决方案
  5. SpringSpringMVCMybatis框架-张晨光-专题视频课程
  6. P3527 [POI2011]MET-Meteors 整体二分 + 树状数组
  7. Spring学习笔记002 - AOP
  8. Anaconda安装,linux操作系统学习
  9. threadingdaemonmultiprocessing
  10. laravel中文字模型的增删改查
  11. “语音识别”服务人类
  12. android马赛克代码,android图片马赛克 mosaic
  13. 发布一个练笔的 Android 阅读器,轻微仿91 Android 阅读器【后续将提供源码】
  14. Ambari HDP 完整安装手册
  15. Android网络课程笔记-----完善GoogleStyleApp框架结构
  16. 前端项目(1)--《学成在线》简单首页
  17. 大数据结合人工智能,助力智慧城市建设
  18. python元组是什么意思_python元组是什么意思
  19. 向日葵资深产品总监技术分享:“国民远控”如何在AD域环境下应用
  20. 网易云信技术创新,助力网易云音乐社交玩法升级

热门文章

  1. java对接微信支付:JSAPI支付(微信公众号支付)
  2. 《惢客创业日记》2022.04.01-30(周五)三月份的总结和四月份的计划
  3. Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval
  4. java.util.LinkedHashMap cannot be cast to com.xxx
  5. 模电——比较器与放大器的联系与区别
  6. Windows/Linux搭建测试环境
  7. CV笔记2:图像插值算法—最近邻插值、双线性插值
  8. 软件开发的小小心得(箴言、原则,etc)
  9. 大模型基础之词表示和语言模型
  10. go2shell安装与使用