|
|
发表于 2023-9-10 14:45:59
|
显示全部楼层
这是一道关于双向链表的填空题。下面是对应空缺处的填写思路:
- #include <iostream>
- using namespace std;
- const int N = 100010;
- int n;
- int L[N], R[N], a[N];
- int main() {
- cin >> n;
- for (int i = 1; i <= n; ++i) {
- int x;
- cin >> x;
- a[ i] = x; // 填充空白处①,将输入的数x保存到数组a中
- }
- for (int i = 1; i <= n; ++i) {
- R[ i] = i + 1; // 填充空白处②,初始化R数组,使得每个位置的下一个位置为i+1
- L[ i] = i - 1; // 填充空白处③,初始化L数组,使得每个位置的上一个位置为i-1
- }
- R[n] = n + 1; // 填充空白处④,将最后一个位置的下一个位置设为n+1
- for (int i = 1; i <= n; ++i) {
- L[R[a[ i]]] = L[a[ i]]; // 填充空白处③,将a[ i]的上一个位置设为L[a[ i]]
- R[L[a[ i]]] = R[a[ i]]; // 填充空白处④,将a[ i]的下一个位置设为R[a[ i]]
- }
- for (int i = 1; i <= n; ++i) {
- cout << R[ i] << " "; // 填充空白处⑤,输出R数组的值
- }
- cout << endl;
- return 0;
- }
复制代码
填空思路解析:
1. 在第一个 for 循环中,将输入的数 x 保存到数组 a 中,填充空白处①。在排列 P 的第 i 个位置,将第 i 个输入保存到 a[ i] 中。
2. 在第二个 for 循环中,初始化 R 数组和 L 数组,填充空白处②和③。R 数组表示当前位置的下一个位置,L 数组表示当前位置的上一个位置。初始时,R 数组的值设为 i+1,L 数组的值设为 i-1。
3. 在第三个 for 循环中,遍历排列 P。通过修改 L 数组和 R 数组,来更新每个位置的上一个位置和下一个位置。对于排列 P 的第 i 个位置,将 a[ i] 的上一个位置设为 L[a[ i]],将 a[ i] 的下一个位置设为 R[a[ i]]。
4. 最后一个 for 循环中,输出 R 数组的值,填充空白处⑤,即输出每个位置的下一个位置。
这样,运行完该程序,就可以得到所需的 q 数组。
希望这个解析能够帮助到你!如有更多问题,请随时提问。
如果问题已经解决,请设置最佳答案 |
|