当前位置: 首页 > news >正文

B3631 单向链表

单向链表

题目描述

实现一个数据结构,维护一张表(最初只有一个元素 1 1 1)。需要支持下面的操作,其中 x x x y y y 都是 1 1 1 1 0 6 10^6 106 范围内的正整数,且保证任何时间表中所有数字均不相同,操作数量不多于 1 0 5 10^5 105

  • 1 x y :将元素 y y y 插入到 x x x 后面;
  • 2 x :询问 x x x 后面的元素是什么。如果 x x x 是最后一个元素,则输出 0 0 0
  • 3 x:从表中删除元素 x x x 后面的那个元素,不改变其他元素的先后顺序。

输入格式

第一行一个整数 q q q 表示操作次数。

接下来 q q q 行,每行表示一次操作,操作具体间题目描述。

输出格式

对于每个操作 2,输出一个数字,用换行隔开。

样例 #1

样例输入 #1

6
1 1 99
1 99 50
1 99 75
2 99
3 75
2 1

样例输出 #1

75
99

解题思路

这道题是一个很典型的单向链表的题目。
这里使用的方法是y总给的那套模板,但是要稍微修改一下,因为这里题目要求没有是按照第几个插入的数字来的,,而是去直接按照数字的值来进行。
又因为题目上说没有重复的数字 所以直接以每个数字本身来当下标就可以了。具体AC代码如下

代码

#include <iostream>using namespace std;
const int N = 1000010;int e[N], ne[N];void init()
{e[1] = 1;ne[1] = -1;
}//将元素 y 插入到x 后面
void insert(int x, int y)
{e[y] = y;ne[y] = ne[x];ne[x] = y;
}void remove(int x)
{ne[x] = ne[ne[x]];
}int main()
{init();int q;cin >> q;while (q--){int p;cin >> p;int x, y;if (p == 1){cin >> x >> y;insert(x,y);}else if ( p == 2){cin >> x;if (ne[x] == -1) cout << "0\n";else cout << e[ne[x]] << '\n';}else {cin >> x;remove(x);}}return 0;
}

http://www.mrgr.cn/news/49282.html

相关文章:

  • Stm32 can总线协议学习,原子教程
  • 【AI论文精读13】RAG论文综述2(微软亚研院 2409)P5-可解释推理查询L3
  • 开关电源调制模式和工作模式
  • 【Python随笔】pyside6绘制表盘和数字时钟的方法
  • 【亲测可行】最新ubuntu搭建rknn-toolkit2
  • [LeetCode] 5. 最长回文字串
  • 20240730 联发科 笔试
  • 外卖点餐系统小程序的设计
  • 架构设计笔记-10-软件架构的演化和维护
  • 智慧乡村可视化设计,让美丽的乡村更加魅力。
  • PAT甲级1007 Maximum Subsequence Sum
  • 24/10/13 算法笔记 批量规范化
  • stm32单片机个人学习笔记9(TIM输入捕获)
  • node简单实现读取文件内容
  • 第十五届蓝桥杯C/C++学B组(解)
  • C语言实现输出空心数字金字塔
  • Vue——Uniapp回到顶部悬浮按钮
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13
  • 【gRPC】gRPC简单使用 protocol
  • GPT联网分析到底有多强?实测效果告诉你答案!