代码实现-数组模拟单链表
const int N = 1e5 + 10;
int head, idx, e[N], ne[N];
void init()
{
//
head = -1 ;
idx = 0;
}
void insertBeforeHead(int x)
{
e[idx] = x;
ne[idx] = head;
head = idx;
idx ++ ;
}
void insertBeforeId(int id, int x)
{
e[idx] = x;
ne[idx] = ne[id];
ne[id] = idx;
}
void removeHead()
{
head = ne[head];
}
void removeRight(int preid)
{
ne[preid] = ne[ne[preid]];
}
详解
head 表示模拟中的链表中指向头节点的指针,实现中的数组中元素下标
idx 表示模拟中的链表中指向当前节点的指针,实现中的数组元素下标
e[i] 表示模拟中链表节点i的data数据,实现中的数组元素值为所需
ne[i]表示模拟中链表节点i的next指针,实现中存储各个元素的下标
补充
数组模拟链表:
1 初始预先实现一个数组空间
2 删除节点后无需释放
更加高效使用被删节点留下的空间:
1 (idx ++)%N && ne[(idx++)%N]==-1