1 #include<bits/stdc++.h>
2 using namespace std;
3
4 const int maxn=1010;
5 struct node{ //point即指针,data就是需要维护的数据
6 int point,data;
7 }a[maxn];
8 int head,cnt; //head即头指针,cnt即内存池计数器
9
10 void buid(){
11 head=++cnt; //把head设为没有实际意义的哨兵
12 a[head].data=0;
13 }
14
15 void add(int k,int now)
16 {
17 for(int i=head;i;i=a[i].point) //从头指针开始遍历链表
18 if(!(--k)) //到达插入位置
19 {
20 a[++cnt].point=a[i].point; //将新插入节点的指针指向插入位置的后继
21 a[i].point=cnt; //将前驱节点的指针指向新插入节点
22 a[cnt].data=now;
23 break;
24 }
25 }
26 void del(int k)
27 {
28 for(int i=head;i;i=a[i].point)
29 if((--k)==1) //找到前驱
30 {
31 a[i].point=a[a[i].point].point; //将前驱的指针指向后继
32 break;
33 }
34 }
35 int main()
36 {
37 buid();
38 add(1,5); //进入,因为计算时考虑了哨兵,所以进入时++k
39 add(2,6); //进入,因为计算时考虑了哨兵,所以进入时++k
40 add(3,3);
41 add(4,1);
42 add(5,2);
43 add(6,8);
44 add(7,4);
45
46 for(int i=a[head].point;i;i=a[i].point)
47 cout<<a[i].data<<" ";
48 cout<<endl;
49
50 add(6,9);
51
52 for(int i=a[head].point;i;i=a[i].point)
53 cout<<a[i].data<<" ";
54 cout<<endl;
55
56 del(3);
57
58 for(int i=a[head].point;i;i=a[i].point)
59 cout<<a[i].data<<" ";
60 cout<<endl;
61
62 return 0;
63 }
链表博客 https://www.cnblogs.com/ivanovcraft/p/9037475.html