The #B3631.单向链表 is very easy.

Let me teach you.

I. 顶以遍亮

const int N = 1e6 + 10;
//   ↓a存储值i的下一个数的下标
int a[N], q, whatAreYouWantToDo, x,    y;
//     问题↑数量   ↑指令类型      位↑置 内↑容

II. 度踢

提炼有用信息:

操作

1 x y将元素y插入到x后面;将元素 y 插入到 x 后面;

2 x询问x后面的元素是什么。如果x是最后一个元素,则输出0询问 x 后面的元素是什么。如果 x 是最后一个元素,则输出 0;

3 x从表中删除元素x后面的那个元素,不改变其他元素的先后顺序。从表中删除元素 x 后面的那个元素,不改变其他元素的先后顺序。

数据

其中 x 和 y 都是 1 到 10^6 范围内的正整数,且保证任何时间表中所有数字均不相同,q不多于 10^5

III. 写⑩

补上输入输出和基础结构后代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;
	//   ↓a存储值i的下一个数的下标
	int a[N], q, whatAreYouWantToDo, x,    y;
	//     问题↑数量   ↑指令类型      位↑置 内↑容

int main()
{
	cin >> q;
	while (q--) // 执行q次
	{
		cin >> whatAreYouWantToDo;
		if (whatAreYouWantToDo == 1)
		{
			cin >> x >> y;
		}
		else if (whatAreYouWantToDo == 2)
		{
			cin >> x;
		}
		else if (whatAreYouWantToDo == 3)
		{
			cin >> x;
		}
	}
	
	return 0;
}

现在代码已经完成 83% 力!

离成功之差一点点力!

IV 思考算法

根据题意得知我们需要进行三种操作:

插入(in)、查询(check)、删除(delete)

接下来一一一实现

1)插入(in)

插入的本质就是

1.将上一个的下一个的下标设为自己的下一个的下标

2.将上一个的下一个的下标设为自己的下标

3.没了

假设要在位置xx插入yy

1.a[x]'s next = a[x-1]'s next将上一个的下一个的下标设为自己的下一个的下标

2.a[x - 1]'s next = x将上一个的下一个的下标设为自己的下标

3. 没了

It is easy.

2)查询(check)

What can I say?

cout << a[a[x]] << endl; 输出值x的下一个的值

3)删除(delete)

删除元素 = 将元素下一个改成元素下一个的下一个 = 跳过要删除的元素

a[x]是值x下一个的下标

a[a[x]]是值x下一个的下一个的下标

把三个操作全部写上就AC力