单链表算法
时间复杂度:插入删除O(1),查找O(n)
head指向的位置是头,-1的位置是尾部
1、定义一个终止节点-1,开始head(头指针指向终止节点),idx为新节点的下标,该下标存放的是节点的相关信息。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200424105600834.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczODc2NA==,size_16,color_FFFFFF,t_70)
2、在头插入新节点,即在idx下标存放相关信息的值,然后新节点的下一位指向头节点所在的位置,头节点移动到当前新节点,新节点的下标+1。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200424105929780.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczODc2NA==,size_16,color_FFFFFF,t_70)
3、在第k个输入的数后面插入一个数,先在新节点idx下标先存放相关信息,使新节点的下一个节点指向第k节点所指向的下一个节点,再使第k节点下一个节点指向当前新节点
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200424110712211.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczODc2NA==,size_16,color_FFFFFF,t_70)
4、删除第k个输入的数后面的数,使第k个数指向下一个节点的下一个节点即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200424110952611.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczODc2NA==,size_16,color_FFFFFF,t_70)
遍历从head开始,一直到-1。
结合代码自行理解
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
namespace IO{
inline LL read(){
LL o=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){o=o*10+c-'0';c=getchar();}
return o*f;
}
}using namespace IO;
const int N=1e5+7,M=2e4+7,INF=0x3f3f3f3f,mod=1e4;
int e[N],ne[N],head=-1,idx;
void Del(int k){
ne[k]=ne[ne[k]];
}
void Insert(int k,int x){
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx++;
}
void Insert_head(int x){
e[idx]=x;
ne[idx]=head;
head=idx++;
}
int main(){
int n;
scanf("%d",&n);
char op[2];
int k,x;
for(int i=0;i<n;i++){
scanf("%s",op);
if(*op=='H'){
scanf("%d",&x);
Insert_head(x);
}else if(*op=='D'){
scanf("%d",&k);
if(k==0)head=ne[head];
else Del(k-1);
}else{
scanf("%d %d",&k,&x);
Insert(k-1,x);
}
}
for(int i=head;~i;i=ne[i]){
printf("%d ",e[i]);
}
return 0;
}