- 数据结构
单向链表题解
- 2025-7-8 11:31:48 @
请勿盗用*
#include <bits/stdc++.h>
using namespace std;
struct node{
int v;
node *next;
};
int main(){
node *head=new node({1,0});
int n,x,y,z;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y;
if(x==1){
cin>>z;
node *p=head;
while(p->v!=y&&p!=NULL){
p=p->next;
}
node *s=new node({z,p->next});
p->next=s;
}else if(x==2){
node *p=head;
while(p->v!=y&&p!=NULL){
p=p->next;
}
if(p->next==0){
cout<<0;
}else{
cout<<p->next->v;
}
cout<<'\n';
}else{
node *p=head;
while(p->v!=y&&p!=NULL){
p=p->next;
}
p->next=p->next->next;
}
}
return 0;
}
维护一张初始只有元素 1 的表,支持以下操作:
1 x y:将元素 y 插入到 x 后;
2 x:询问 x 后面的元素是什么;
3 x:从表中删除 x 后的元素。
如果有操作二,输出一个数字,并换行。
我们依旧可以看成一些人在排队,只不过多了一个插队和走人的操作。
我们假设初始排队顺序为:1 4 2 3。
若 5 号同学插队到 4 号的后面,那么会发生什么?
我们先来看看初始的链表情况:
i 1 2 3 4
nxt 4 3 0 2
此时,5 号同学插入 4 号的后面,那么链表就会变为:
i 1 2 3 4 5
nxt 4 ? 0 ? ?
此时 2 4 号的位置发送变化,我们一个一个的分析:
2 号的后面没有影响,所以 2 号的后面依旧是 3 号;
5 号插到了 4 号的后面,所以 5 号的后面将会是原本 4 号后面的人,所以 5 号的后面为 2 号;
4 号的后面插进了一个 5 号,所以 4 号的后面变为 5 号。
所以整个链表变为:
i 1 2 3 4 5
nxt 4 3 0 5 2
这时,2 号同学离开了队伍,那么又会发送什么?
那么链表会变为:
i 1 2 3 4 5
nxt 4 before 3 0 5 ?
5 号的后面原本是 2 号,但是 2 号离开了,2 号原本的后面是 3 号,所以 5 号的后面变为了 3 号。
所以变为:
i 1 3 4 5
nxt 4 0 5 3
话不多说赶紧自己做一遍吧!
1 条评论
-
徐涵凇 LV 6 @ 2025-7-8 15:51:14
一眼AI
- 1