您当前的位置: 首页 >  链表

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AcWing 826. 单链表

MangataTS 发布时间:2022-01-20 15:29:28 ,浏览量:0

题目连接

https://www.acwing.com/problem/content/828/

思路

有点类似链式前向星建图,不同的是链式前向星是多链表的形式,这个只是单链表,我们的头节点标记为-1,每次插入的时候将当前的指针指向后面的元素,然后将前面的指针指向当前即可完成插入操作,注意这里的节点是从0开始计算的,关于删除操作,我们需要注意删除头节点的时候直接让head指向head的下一个位置即可

#include
using namespace std;
#define ll long long
#define mod 1000000009
#define endl "\n"
#define PII pair

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            
关注
打赏
1665836431
查看更多评论
0.5997s