数组模拟静态链表 双向链表
- #include <iostream>
- using namespace std;
- const int N=100010;
- //head 表示头节点的下标
- //e[i] 表示i节点的值
- //ne[i] 表示i节点的下一个节点的位置,即
- //i节点的next指针是多少
- //idex 存储当前已经用到了哪个点
- int head,e[N],ne[N],idx;
- //初始化
- void init()
- {
- head=-1;
- idx=0;
- }
- //将x插入到头节点
- void add_to_head(int x)
- {
- e[idx]=x;//将x插入到当前节点
- ne[idx]=head;//将当前节点的下一个节点的
- //位置变为头节点指向的节点的位置
- head=idx;//头节点指向当前节点
- idx++;//当前节点已经用过
- }
- //将x插到下标是k的点的后面
- void add(int k,int x){
- e[idx]=x;
- ne[idx]=ne[k];
- ne[k]=idx;
- idx++;
- }
- //将下标是k的点的后面的点删掉
- void remove(int k){
- ne[k]=ne[ne[k]];
- }
- int main()
- {
- int m;
- cin>>m;
- init();
- while(m--){
- char x;
- cin>>x;
- if(x=='H'){
- int y;
- cin>>y;
- add_to_head(y);
- }
- else if(x=='D'){
- int y;
- cin>>y;
- if(!y)head=ne[head];
- remove(y-1);
- }
- else {
- int y,z;
- cin>>y>>z;
- add(y-1,z);
- }
- }
- for(int i=head;i!=-1;i=ne[i])
- cout<<e[i]<<" ";
- return 0;
- }
双向链表
- #include <iostream>
- using namespace std;
- const int N=100010;
- int m;
- int e[N],l[N],r[N],idx;
- //初始化
- void init()
- {
- //0表示左端点,1表示右端点
- r[0]=1,l[1]=0;
- idex=2;
- }
- //在下标是k的点的右边,插入x
- void add(int k,int x)
- {
- e[idx]=x;
- r[idx]=r[k];
- l[idx]=k;
- l[r[k]]=idx;
- r[k]=idx;
- }
- //删除第k个点
- void remove(int k)
- {
- r[l[k]]=r[k];
- l[r[k]]=l[l];
- }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现