/*
单链表—>邻接表—>存储图和树
双链表—>优化
*/
/*
ex:
1 3 5 7 9
0 1 2 3 4
e[0] = 3 , e[1] = 3,... , e[4] = 9;
ne[0] = 1, ne[1] = 2, ... , ne[4] = -1 (空节点);
head存储头节点的下标,e[i]存储节点i的值,ne[i]存储节点i的next指针(指向下一个节点的坐标)
idx表示当前用到了哪个节点(指针)
*/
int head,e[N],ne[N],idx;
// 初始化
void init ( ) {
head = -1;
idx = 0;
}
// 将x插入到头结点
void add_to_head( int x ) {
e[idx] = x;
ne[idx] = head;
head = idx++;
}
// 将x插入到下标是k的点后面
void add( int k, int x ) {
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
// 删除头结点指向的结点
void remove_head ( ) {
head = ne[head];
}
// 将下标是k的点后面的点( 即第k+1个点 )删除
void remove( int k ) {
ne[k] = ne[ ne[k] ];
}
//单链表的遍历:
for ( int i = head; i != -1; i = ne[i] ) {
}