#6022. 操作循环双链表
操作循环双链表
题目描述
循环双链表的节点定义如下:
struct Node {
int val;
Node *nxt, *pre;
};
Node *head; // 头节点
int tot; // 统计节点数量
链表的操作有以下 种:
1 v,在链表头部插入值为v的节点。2 v,在链表尾部插入值为v的节点。3 x v,在第一个数据域为x的节点后插入值为v的节点,如果不存在数据域为x的节点,则忽略删除操作。4 x v,在第一个数据域为x的节点前插入值为v的节点,如果不存在数据域为x的节点,则忽略删除操作。5 v,删除数据域为v的节点,如果不存在数据域为v的节点,则忽略删除操作。6,正序遍历链表,输出所有节点的数据域。7,倒序遍历链表,输出所有节点的数据域。8,输出链表中的节点数量。
格式要求
输入格式
第一行先输入一个整数 ,代表操作次数。
接下来 行,每行先输入一个整数 ,代表操作类型,根据操作类型,会再输入 或 。
,,。
输出格式
输出若干行,每行代表操作 的一次输出,同一行里的数字间用空格隔开。
样例
12
1 5
2 10
1 3
6
3 5 7
6
4 3 8
6
5 3
6
7
8
3 5 10
3 5 7 10
8 3 5 7 10
8 5 7 10
10 7 5 8
4
样例解释
| 步骤 | 操作 | 说明 | 链表状态 | tot |
|---|---|---|---|---|
| 1 | 1 5 |
头部插入5 | 5 |
1 |
| 2 | 2 10 |
尾部插入10 | 5 10 |
2 |
| 3 | 1 3 |
头部插入3 | 3 5 10 |
3 |
| 4 | 6 |
正序遍历输出 | 输出 3 5 10 |
|
| 5 | 3 5 7 |
在5后面插入7 | 3 5 7 10 |
4 |
| 6 | 6 |
正序遍历输出 | 输出 3 5 7 10 |
|
| 7 | 4 3 8 |
在3前面插入8 | 8 3 5 7 10 |
5 |
| 8 | 6 |
正序遍历输出 | 输出 8 3 5 7 10 |
|
| 9 | 5 3 |
删除值为3的节点 | 8 5 7 10 |
4 |
| 10 | 6 |
正序遍历输出 | 输出 8 5 7 10 |
|
| 11 | 7 |
倒序遍历输出 | 输出 10 7 5 8 |
|
| 12 | 8 |
输出节点数量 | 输出 4 |