#A5305G. 单链表综合操作
单链表综合操作
题目描述
请你实现一个支持多种基础操作的单链表。 给定一个初始长度为 的单链表,随后需要处理 次操作。操作分为以下四种:
- 增 (
insert k v):在当前链表的第 个节点之后插入一个值为 的新节点。
- 如果 ,表示在单链表的最头部(首个节点之前)插入新节点。
- 如果 当前链表长度,表示在单链表的最尾部插入新节点。
- 删 (
delete k):删除当前链表中的第 个节点。
- 如果 或者 当前链表长度,则判定为无效操作,链表保持不变。
- 查 (
search x):查找当前链表中首次出现值为 的节点,并立刻输出该节点的序号(占一行)。
- 如果链表中不存在值为 的节点,请输出
-1。
- 改 (
update k v):将当前链表中的第 个节点的值修改为 。
- 如果 或者 当前链表长度,则判定为无效操作,链表保持不变。
注意: 所有操作中的节点编号均从 开始动态计算。
输入格式
第一行包含两个整数 和 ,分别表示初始链表的长度和操作的次数。 第二行包含 个整数,表示初始单链表的各个节点的值(若 ,则此行为空)。 接下来的 行,每行包含一个操作指令,格式为上述四种之一:
insert k vdelete ksearch xupdate k v
其中所有涉及的节点序号 和节点值 均满足 。
输出格式
对于每一次 search 操作,输出一行一个整数,表示查找的结果。
在处理完所有的 次操作后,最后单独输出一行,包含最终单链表所有节点的值,数字之间用一个空格隔开。如果最终链表为空,请输出单词 empty。
样例输入
5 6
10 20 30 40 50
search 30
insert 2 25
delete 4
update 5 55
search 40
delete 100
样例输出
3
4
10 20 25 40 55
样例说明
初始链表:10 20 30 40 50
search 30:30在第 3 个位置,输出3。insert 2 25:在第 2 个节点后插入25,链表变为10 20 25 30 40 50。delete 4:删除第 4 个节点(值为30),链表变为10 20 25 40 50。update 5 55:将第 5 个节点的值改为55,链表变为10 20 25 40 55。search 40:40在第 4 个位置,输出4。delete 100:当前链表长度为 5,第 100 个节点不存在,无效操作,链表不变。 最后输出修改完毕后的链表:10 20 25 40 55。