算法题(89):单项链表
审题:
本题需要我们实现一个可以执行三个指令的数据结构来解决这里的问题
思路:
方法一:利用数组模拟链表由于这里涉及插入删除操作,所以我们不能使用数组结构存储数据,这样子会超时,所以我们就利用数组来存储节点的各项数据来模拟链表
id表示地址,e[N]表示数据域,ne[N]表示节点next指针的指向,mp[M]用于记录i值数据的地址(id),以利用数组的随机读取功能快速查找
解题:
(1)部分变量创建
(2)q数据录入与初始化模拟链表
由于题目中说一开始有一个值为1的数据,所以我们需要先将1弄进模拟链表
(3)执行指令
mp:利用值为索引记录id地址
ne/e:利用id地址为索引记录数据值与next地址
插入:
给y分配id地址,更新e和ne的值,然后改变x的ne指向为y的id地址
查询:
由于我们利用了mp记录了x元素的id地址,所以查询可以直接用x元素的地址和ne找到下一个元素的地址,然后以该地址为索引查出下一个节点的数据值
删除:
让x节点指向x节点的下一个节点的下一个节点即可
而pos是x节点的地址,ne[pos]是x下一个节点的地址,ne[ne[pos]]就是目标节点的地址
B3631 单向链表 - 洛谷