07-单链表-单链表基本操作
题目
来源
826. 单链表 - AcWing题库
思路
详见代码,主要思想就是用数组来模拟链表的创建。数组其实跟静态链表等价,由于动态链表动态new对于大数据太过于耗时,因此采用数组的方式。那数组如何起到链表的效果?用下标来索引。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int head,e[N],ne[N],idx;
//初始化
void init(){
head=-1;
idx=0;
}
//插入到头结点之后(把新的点插到头结点的位置80%)
void add2head(int x){
e[idx]=x;
ne[idx]=head; //第一步
head=idx; //第二步
idx++;
}
//将节点插入到下标是K的后面
void add2k(int k,int x){
e[idx]=x;
ne[idx]=ne[k]; //第一步
ne[k]=idx; //第二步
idx++;
}
//将下标是K的点删掉
void del2k(int k){
ne[k]=ne[ne[k]];
}
int main(){
int n;
cin>>n;
init();
while(n--){
char op;
int x,k;
cin>>op;
if(op=='H'){
cin>>x;
add2head(x);
}
else if(op=='D'){
cin>>k;
if(k==0)head=ne[head];
//k=0,删除头结点,相当于将head指向head下下个点
del2k(k-1); //因为0号点是第一个插入的点
}else if(op=='I'){
cin>>k>>x;
add2k(k-1,x);//因为0号点是第一个插入的点
}
}
for(int i=head;i!=-1;i=ne[i]){
cout<<e[i]<<" ";
}
cout<<endl;
return 0;
}