网站做多少分辨率,18成禁人养成游戏手游,网络运维基础知识,如何制作网页链接二维码文章目录 QuestionIdeasCode Question
实现一个单链表#xff0c;链表初始为空#xff0c;支持三种操作#xff1a;
向链表头插入一个数#xff1b; 删除第 k 个插入的数后面的数#xff1b; 在第 k 个插入的数后插入一个数。 现在要对该链表进行 M 次操作#xff0c;进… 文章目录 QuestionIdeasCode Question
实现一个单链表链表初始为空支持三种操作
向链表头插入一个数 删除第 k 个插入的数后面的数 在第 k 个插入的数后插入一个数。 现在要对该链表进行 M 次操作进行完所有操作后从头到尾输出整个链表。
注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数则按照插入的时间顺序这 n 个数依次为第 1 个插入的数第 2 个插入的数…第 n 个插入的数。
输入格式 第一行包含整数 M 表示操作次数。
接下来 M 行每行包含一个操作命令操作命令可能为以下几种
H x表示向链表头插入一个数 x 。 D k表示删除第 k 个插入的数后面的数当 k 为 0 时表示删除头结点。 I k x表示在第 k 个插入的数后面插入一个数 x 此操作中 k 均大于 0 。 输出格式 共一行将整个链表从头到尾输出。
数据范围 1≤M≤100000
所有操作保证合法。
输入样例 10 H 9 I 1 1 D 1 D 0 H 6 I 3 6 I 4 5 I 4 5 I 3 4 D 6 输出样例 6 4 6 5
Ideas
Code
#include iostreamusing namespace std;
const int N 1e5 10;
int e[N], ne[N], head, idx;void add_to_head(int x){e[idx] x;ne[idx] head;head idx ;
}void add(int k, int x){e[idx] x;ne[idx] ne[k];ne[k] idx ;
}void rm(int k){ne[k] ne[ne[k]];
}int main(){int n;cin n;head -1;char op[2];while(n --){scanf(%s, op);if (op[0] H){int x;cin x;add_to_head(x);}else if(op[0] D){int k;cin k;if (k 0) head ne[head];else rm(k - 1);}else{int k, x;cin k x;add(k - 1, x);}}for (int i head; i ! -1; i ne[i]) cout e[i] ;return 0;
}