直接贴上代码
const int N=100010;
int e[N]; // 存储每一个插入的值
int ne[N]; // 指向x接点的下一个节点
int idx; // 给每一个插入的结点编号
int head=-1; // 头指针,初始化为-1
void Init(){
head=-1;
idx=0;
}
void add_to_head(int x){
e[idx]=x; // Node*temp=new Node(x);
ne[idx]=head; // temp->next=head;
head=idx++; // head=temp;
}
void add(int k,int x){
e[idx]=x; // Node*temp=new Node(x);
ne[idx]=ne[k]; // temp->next=k->next; (这里k是节点)
ne[k]=idx++; // k->next=temp;
}
void remove(int k){ // 删除第k的节点,调用remove(k-1)即可(因为从第0个节点插入)
ne[k]=ne[ne[k]]; // k->next=k->next->next;
}
void Print(){ // 输出
for(int i=head;i!=-1;i=ne[i]){ // for(Node*p=head;p;p=p->next)
cout<<e[i]<<' '; // cout<<p->val<<' ';
}
}
总体思想
用两个数组来实现单链表,e
数组来存储插入点的值;ne
数组来存储插入点的下一个节点;idx
给每个插入节点分配一个编号,让其不重复;这里采用 不带头结点 的方式,head
表示头指针存储的下标。