**链表数字游戏**

2026 华为OD机试真题 5月30日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

在一个数字游戏中,m(1≤m≤105) 个参与者排成一队,每人持有一个整数号码牌 n(0≤n≤109)。游戏只进行一轮,按照初始队列的顺序(从队首到队尾)处理每个人,每人仅处理一次,处理规则如下:

  1. 如果号码是 3 的倍数,则将其淘汰(从队列中移除)。

  2. 否则,如果号码的十进制表示中包含数字 3,则将其移动到队尾

  3. 否则,如果号码的十进制表示中包含数字 2,则将其移动到队首

  4. 否则,位置保持不变。

  5. 对于规则 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

说明

处理过程:

  1. 淘汰 12→[23,7,13,8]

  2. 23 移动到队尾 →[7,13,8,23]

  3. 7 不变 →[7,13,8,23]

  4. 13 移动到队尾 →[7,8,23,13]

  5. 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 字符串

解题思路

本题核心在于模拟游戏规则,将链表节点按照规则分类处理。

游戏规则总结:

  1. 淘汰:3的倍数直接移除
  2. 队尾:包含数字3(但不是3的倍数)
  3. 队首:包含数字2(不包含3)
  4. 不变:其他数字

优先级:规则1 > 规则2 > 规则3 > 规则4

算法步骤

  1. 合法性检查:验证数字范围 0 ≤ n ≤ 10^9
  2. 规则1:跳过3的倍数
  3. 规则2:包含数字3,加入队尾列表
  4. 规则3:包含数字2,加入队首列表
  5. 规则4:其他,保持不变
  6. 合并结果:队首 + 中间 + 队尾

复杂度分析

  • 时间复杂度:O(n × m),n 是节点数,m 是数字位数
  • 空间复杂度:O(n),存储分类结
THE END