AcWing 826. 单链表
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 826. 单链表相关的知识,希望对你有一定的参考价值。
题目连接
https://www.acwing.com/problem/content/828/
思路
有点类似链式前向星建图,不同的是链式前向星是多链表的形式,这个只是单链表,我们的头节点标记为-1,每次插入的时候将当前的指针指向后面的元素,然后将前面的指针指向当前即可完成插入操作,注意这里的节点是从0开始计算的,关于删除操作,我们需要注意删除头节点的时候直接让head指向head的下一个位置即可
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000009
#define endl "\\n"
#define PII pair<int,int>
int dx[4]=0,-1,0,1,dy[4]=-1,0,1,0;
ll ksm(ll a,ll b)
ll ans = 1;
for(;b;b>>=1LL)
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
return ans;
ll lowbit(ll x)return -x & x;
const int N = 2e6+10;
int head,e[N],ne[N],idx;
//初始化头节点信息和idx指针
void init()
head = -1;
idx = 0;
//将x插入到头节点后面
void add_to_head(int x)
e[idx] = x;
ne[idx] = head;
head = idx++;
//删除第k个后面的数
void remove(int k)
ne[k]=ne[ne[k]];
//将x插到下标是k的点的后面
void add(int k,int x)
e[idx] = x;
ne[idx] = ne[k];
ne[k] = idx++;
int main()
init();
int m;
cin>>m;
int k,x;
while(m--)
char op;
cin>>op;
if(op == 'H')
cin>>x;
add_to_head(x);
else if(op == 'D')
cin>>k;
if(k == 0) head = ne[head];
remove(k-1);
else
cin>>k>>x;
add(k-1,x);
int p = head;
while(p != -1)
cout<<e[p]<<" ";
p=ne[p];
return 0;
以上是关于AcWing 826. 单链表的主要内容,如果未能解决你的问题,请参考以下文章