单链表
只具有一种指向方向的链表
常见操作为插入节点与删除节点
模板题为acwing的826题
用一个结构体数组模拟链表,cnt指向当前最后一个插入的数字
H表示往链表头插入一个数x
D表示删除第k个输入的后一个数,如果k为0则删除链表头
I表示往第k个输入后插入一个数x
#include<bits/stdc++.h> using namespace std; struct List{ int val,next;//next如果为0表示到达链表尾部 }ar[100050]; int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int M,i,x,k,head=0,cnt=0;//head表示当前链表头的位置,cnt表示某个输入数 char s[2]; cin>>M; for(i=1;i<=M;i++){ cin>>s; if(s[0]=='H'){ cin>>x; cnt++; ar[cnt].val=x; ar[cnt].next=head; head=cnt;//先让其指向旧链表头后再更新链表头 } else if(s[0]=='D'){ cin>>k; if(k) ar[k].next=ar[ar[k].next].next;//直接指向下一个数的下一个数 else head=ar[head].next;//更改链表头为链表内第二个数 } else if(s[0]=='I'){ cin>>k>>x; cnt++; ar[cnt].val=x; ar[cnt].next=ar[k].next;//先复制第k个数的指向 ar[k].next=cnt;//再让第k个数指向自己 } } if(head) cout<<ar[head].val; while(ar[head].next){ head=ar[head].next; cout<<' '<<ar[head].val; } return 0; }