
- #include
- using namespace std;
- const int N=1e5+10;
- int a[N];
- int e[N],ne[N],idx;
- int head,head2;
-
- void init()
- {
- head=-1;
- head2=-1;
- idx=0;
- }
-
- void add(int a,int b) //把b插入到a后面
- {
- e[idx]=b;
- ne[idx]=ne[a];
- ne[a]=idx;
- idx++;
- }
-
- void add_head(int b) //把b插入到头结点后面
- {
- e[idx]=b;
- ne[idx]=head;
- head=idx++;
- }
-
-
- void add_head2(int b)
- {
- e[idx]=b;
- ne[idx]=head2;
- head2=idx++;
- }
-
- void remove(int k) //删除第k个插入的数后面的数
- {
- ne[k]=ne[ne[k]];
- }
-
- void remove_head() //删除头结点后面的数
- {
- head=ne[head];
- }
-
- int main()
- {
- int n,l,r;
- cin>>n>>l>>r;
-
- init();
- for(int i=0;i
- {
- scanf("%d",&a[i]);
- }
-
- for(int i=0;i
- {
- if(i==0)
- {
- add_head(i);
- }
- else
- {
- add(i-1,i);
- }
- }
-
-
- //下面进行头插法
- int p=idx; //头插法由于是倒过来插的,所以idx是第一个插入的元素,也就是最后一个元素
-
-
- //我们把l到r的这一段单独拿出来然后头插到 head2指引的链表中-----------
- l--;
- r--;
- for(int i=l;i!=r+1&&i!=-1;i=ne[i])
- {
- int j=e[i];
- add_head2(j);
- }
- //----------------------------------------------------------------------
-
-
- if(l==0) //如果l是head指针指向的节点
- {
- head=head2;
- ne[p]=ne[r];
- }
- else //如果l不是head指针指向的节点
- {
- ne[l-1]=head2;
- ne[p]=ne[r];
- }
-
-
- for(int i=head;i!=-1;i=ne[i])
- {
- int j=e[i];
- cout<" ";
- }
- cout<
-
- return 0;
- }
-
相关阅读:
TCP的粘包拆包问题+解决方案
全网最牛自动化测试框架系列之pytest(3)-测试命名规则
Android - toolbar 优化 title修改边距和navigation icon修改padding值
Docker搭建MySQL主从模式案例
新版 Ubuntu 中 gnome-terminal 可恶的行间距问题逼我退回了 Ubuntu 20.04
【深度学习】 自编码器(AutoEncoder)
Redis面经
算法学习笔记2023.1
时序预测 | MATLAB实现基于QPSO-BiGRU、PSO-BiGRU、BiGRU时间序列预测
一文读懂二分查找(插入)算法
-
原文地址:https://blog.csdn.net/bei2002315/article/details/127842212