数据结构——单链表

文章目录


目标:掌握单链表的数据结构

单链表

单链表常用于存储树和图
我们这里用用数组模拟单链表 用数组效率高,而且让我们更加的理解单链表的数据结构
在这里插入图片描述
理解了我画的图,你就知道了单链表需要存储两个信息

  • 下一个的索引

单链表的操作
在这里插入图片描述
ok,基础的操作就这三个、其余的操作也基本可以通过这三个得到

题目
AcWing826 单链表

实现一个单链表,链表初始为空,支持三种操作:
(1) 向链表头插入一个数;
(2) 删除第k个插入的数后面的数;
(3) 在第k个插入的数后插入一个数
现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。
注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。

题解

在这里插入图片描述

这个题目还有一点小坑,比如时间是第k个插入的点的下标是?
第一个点 idx=0
第k个点 idx=k-1 下标是k-1

模板

	//=====单链表的定义=====
	private static int head;
	private static int[] e = new int[N];
	private static int[] ne = new int[N];
	private static int idx;
	
	//=====单链表的操作=====
	//1. 初始化单链表
	private static void init(){
		head = -1;
		idx = 0;
	}
	
	//2. 向单链表的头部插入一个数
	private static void addToHead(int val){
		e[idx] = val;
		ne[idx] = head;  //插入到头
		head = idx; //头部节点跟新
		idx++;		
	}
	
	//3. 向单链表的下标位k个后加一个数val
	private static void add(int k, int val){
		e[idx] = val;
		ne[idx] = ne[k];
		ne[k] = idx;
		idx++;
	}
	
	//4. 删除下标位k后面的那个节点
	private static void remove(int k){
		ne[k] = ne[ne[k]];
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值