定义一种单向链表的构造方法如下所示: 先输入一个整数 n ,代表链表中节点的总数; 再输入一个整数 h ,代表头节点的值; 此后输入 n-1 个二元组 (a, b) ,表示在值为 b 的节点后插入值为 a 的节点。 除此之外,保证输入的链表中不存在重复的节点值。 现在,对于给定的链表构造方法和一个额外的整数 k ,你需要先按照上述构造方法构造出链表,随后删除值为 k 的节点,输出剩余的链表。
在一行上: _1. 先输入一个整数 n (1 ≤ n ≤ 10^3) 代表链表中节点的总数; _2. 随后输入一个整数 h (1 ≤ h ≤ 10^4) 代表头节点的值; _3. 随后输入 n-1 个二元组 (a, b) (1 ≤ a, b ≤ 10^4) ; _4. 最后输入一个整数 k ,代表需要删除的节点值。 除此之外,保证每一个 b 值在输入前已经存在于链表中;每一个 a 值在输入前均不存在于链表中。节点的值各不相同。
在一行上输出 n-1 个整数,代表删除指定元素后剩余的链表。
5 2 3 2 4 3 5 2 1 4 3
2 5 4 1
6 2 1 2 3 2 5 1 4 5 7 2 2
7 3 1 5 4
考点:链表
数据规模 n ≤ 1e3 | 限制 1 秒 / 32MB | 标准输入输出
推荐方向:链表
用指针串接节点,注意断链与重连的顺序。
思路框架(链表 通法 · 非本题专属)
实现要点:返回结果时返回 dummy.next;注意题目给出的链表格式(如 {1,3,5})。
复杂度:时间 O(n) | 空间 O(1)
该范式的通法易错点
对照本题
样例 1:输入 5 2 3 2 4 3 5 2 1 4 3 → 输出 2 5 4 1
在这个样例中,链表的构造过程如下:
头节点为 2 ,得到链表 [orange 2] ;
在 2 后插入 3 ,得到链表 [2, orange 3] ;
在 3 后插入 4 ,得到链表 [2, 3, orange 4] ;
在 2 后插入 5 ,得到链表 [2, orange 5, 3, 4] ;
在 4 后插入 1 ,得到链表 [2, 5, 3, 4, orange 1] ;
随后,删除值为 3 的节点,得到链表 [2, 5, 4, 1] 。
样例 2:输入 6 2 1 2 3 2 5 1 4 5 7 2 2 → 输出 7 3 1 5 4
在这个样例中,链表的构造过程如下:
头节点为 2 ,得到链表 [orange 2] ;
在 2 后插入 1 ,得到链表 [2, orange 1] ;
在 2 后插入 3 ,得到链表 [2, orange 3, 1] ;
在 1 后插入 5 ,得到链表 [2, 3, 1, orange 5] ;
在 5 后插入 4 ,得到链表 [2, 3, 1, 5, orange 4] ;
在 2 后插入 7 ,得到链表 [2, orange 7, 3, 1, 5, 4] ;
随后,删除值为 2 的节点,得到链表 [7, 3, 1, 5, 4] 。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:华为机试编程模拟题4。