AcWing 826. 单链表
原题链接
简单
作者:
Stack456
,
2021-04-29 15:33:00
,
所有人可见
,
阅读 280
单链表的使用问题
- head :值得就是下一个节点位置
- ne:保存的是当期节点的下一个节点的位置
- e: 保存的是大小
- idx: 表示的有多少个节点插入,和链式前项星非常类似
- 最好从1开始比较好解释
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 100010;
int head, e[N], ne[N], idx;//idx:表示的是有多少个节点加入其中了
int n;
void init()
{
head = -1;
idx = 1;
}
void add_to_head(int x)
{
e[idx] = x;
ne[idx] = head;
head = idx++;
}
void add(int k ,int x)
{
//k后面加入节点x
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
}
//此时k代表的是删除节点的前一个节点
void remove(int k)
{
ne[k] = ne[ne[k]];
}
int main()
{
scanf("%d", &n);
init();
while(n --)
{
char op;
int x, k;
cin >> op;
if(op == 'H')
{
int x;
cin >> x;
add_to_head(x);
}
else if(op == 'D')
{
cin >> x;
if(!x)
head = ne[head];
else
remove(x);
}
else
{
cin >> k >> x;
// cout <<op << k << x << endl;
// cout << idx <<endl;
add(k, x);
}
// cout << "--------" << endl;
// for(int i = head; i != -1;i = ne[i])
// cout << e[i] << ' ';
// cout << endl;
}
for(int i = head; i != -1;i = ne[i])
cout << e[i] << ' ';
cout << endl;
return 0;
}