//静态链表,只往后看,找前面必须遍历
//算法题用数组解题更快速//初始化,头节点为空
//将x插入到头节点
//将x插到结点k的后面
//将下标k的后面的点删掉
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>using namespace std;
//静态链表,只往后看,找前面必须遍历
//算法题用数组解题更快速
const int N = 100010;
int head;//头指针位置
int e[N];//表示结点i的值是多少
int ne[N];//结点i的下一个节点
int idx;//存储当前已经用到哪个地址
//初始化,头节点为空
void init(){head = -1;idx = 0;
}
//将x插入到头节点
void add(int x){e[idx] = x;ne[idx] = head;head = idx;//head指向idx指针idx++;
}
//将x插到结点k的后面
void addkx(int k,int x){e[idx] = x;ne[idx] = ne[k];ne[k] = idx;idx++;
}
//将下标k的后面的点删掉
void deletek(int k){ne[k] = ne[ne[k]];
}
例题:826. 单链表
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>using namespace std;
//静态链表,只往后看,找前面必须遍历
//算法题用数组解题更快速
const int N = 100010;
int head;//头指针位置
int e[N];//表示结点i的值是多少
int ne[N];//结点i的下一个节点
int idx=1;//存储当前已经用到哪个地址
//初始化,头节点为空
void init(){head = -1;idx = 0;
}
//将x插入到头节点
void add(int x){e[idx] = x;ne[idx] = head;head = idx;//head指向idx指针idx++;
}
//将x插到结点k的后面
void addkx(int k,int x){e[idx] = x;ne[idx] = ne[k];ne[k] = idx;idx++;
}
//将下标k的后面的点删掉
void deletek(int k){ne[k] = ne[ne[k]];
}int main()
{init();int n;scanf("%d",&n);while(n--){char op[2];scanf("%s",&op);if(op[0] == 'H'){//在头节点后面插入int x;scanf("%d",&x);add(x);}if(op[0] == 'D'){//要特判删除头指针 int k;scanf("%d",&k);if(!k) head = ne[head]; else deletek(k-1);}if(op[0] == 'I'){int x,k;scanf("%d%d",&k,&x);addkx(k-1,x);}}for(int i=head;i!=-1;i=ne[i]){printf("%d ",e[i]);}return 0;
}