**链表数字游戏**
2026 华为OD机试真题 5月30日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
在一个数字游戏中,m(1≤m≤105) 个参与者排成一队,每人持有一个整数号码牌 n(0≤n≤109)。游戏只进行一轮,按照初始队列的顺序(从队首到队尾)处理每个人,每人仅处理一次,处理规则如下:
-
如果号码是 3 的倍数,则将其淘汰(从队列中移除)。
-
否则,如果号码的十进制表示中包含数字 3,则将其移动到队尾。
-
否则,如果号码的十进制表示中包含数字 2,则将其移动到队首。
-
否则,位置保持不变。
-
对于规则 2、3:不论插入队首还是队尾,他们的相对顺序与他们在初始队列中的相对顺序保持一致。
优先级说明:
-
如果一个数字同时满足规则 1 和规则 2,或同时满足规则 1 和规则 3,则遵从规则 1(淘汰)。
-
如果一个数字同时满足规则 2 和规则 3(即同时包含数字 2 和 3,且不是 3 的倍数),则遵从规则 2(移动到队尾)。
2026 华为OD机试真题 5月30日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
输入描述
给定一个表示所有排成队列的链表的头 ListNode
输出描述
1.输出一行整数,表示最终队列的号码牌顺序,用空格分隔
2.超过号码牌整数范围或者人数超过总人数限制,返回 "−1"
示例1
输入
12,23,7,13,8
输出
7 8 23 13
说明
处理过程:
淘汰 12→[23,7,13,8]
23 移动到队尾 →[7,13,8,23]
7 不变 →[7,13,8,23]
13 移动到队尾 →[7,8,23,13]
8 不变 →[7,8,23,13]
最终顺序为 7 8 23 13。
示例2
输入
6,23,32,33,2,3
输出
2 23 32
说明
• 6:是 3 的倍数,淘汰。
• 23:同时包含 2 和 3,但包含数字 3 所以触发规则 2(优先级高于规则 3),移动到队尾。
• 32:同时包含 2 和 3,但包含数字 3 所以触发规则 2(优先级高于规则 3),移动到队尾。
• 33:是 3 的倍数($33 $% 3==0),淘汰。
• 2:包含数字 2,移动到队首。
• 3:是 3 的倍数,淘汰。
示例3
输入
100000000,1
输出
-1
说明
数字超过 109,非法返回 −1 字符串
解题思路
本题核心在于模拟游戏规则,将链表节点按照规则分类处理。
游戏规则总结:
- 淘汰:3的倍数直接移除
- 队尾:包含数字3(但不是3的倍数)
- 队首:包含数字2(不包含3)
- 不变:其他数字
优先级:规则1 > 规则2 > 规则3 > 规则4
算法步骤
- 合法性检查:验证数字范围 0 ≤ n ≤ 10^9
- 规则1:跳过3的倍数
- 规则2:包含数字3,加入队尾列表
- 规则3:包含数字2,加入队首列表
- 规则4:其他,保持不变
- 合并结果:队首 + 中间 + 队尾
复杂度分析
- 时间复杂度:O(n × m),n 是节点数,m 是数字位数
- 空间复杂度:O(n),存储分类结