单向链表
题目描述
实现一个数据结构,维护一张表(最初只有一个元素 11)。需要支持下面的操作,其中 xx 和 yy 都是 11 到 10^6106 范围内的正整数,且保证任何时间表中所有数字均不相同,操作数量不多于 10^5105:
1 x y
:将元素 yy 插入到 xx 后面;2 x
:询问 xx 后面的元素是什么。如果 xx 是最后一个元素,则输出 0;3 x
:从表中删除元素 xx 后面的那个元素,不改变其他元素的先后顺序。
输入格式
第一行一个整数 qq 表示操作次数。
接下来 qq 行,每行表示一次操作,操作具体间题目描述。
输出格式
对于每个操作 2,输出一个数字,用换行隔开。
输入输出样例
#include<iostream>
#include <cstring>
using namespace std;
int main()
{
int a[1000002]={0};
int q,x,y,z;
cin>>q;
while(q--)
{
cin>>z>>x;
if(z==1)
{
cin>>y;
a[y]=a[x];
a[x]=y;
}
else if(z==2)
{
cout<<a[x]<<endl;
}
else if(z==3)
{
a[x]=a[a[x]];
a[a[x]]=0;
}
}
return 0;
}
a[i] 里面放的是下一个元素,为0代表链表结束。
如单链表1->4 -> 2->3->0用数组表示是
1 | 2 | 3 | 4 | 5 | ||
4 | 3 | 0 | 2 |