- C24kongxiangtai's blog
【🍵茶叶讲解🍵】B3631 单向链表
- 2024-12-6 19:35:55 @
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 :
2 x :
3 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.没了
假设要在位置插入
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下一个的下一个的下标