


















2026 华为OD机试真题 4月29日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
实现一个操作历史管理器,使用双向链表存储执行过的操作。支持执行新操作、撤销和重做功能。
2026 华为OD机试真题 4月29日华为OD上机新系统考试真题 100 分题型
命令只会出现 $execute$ {操作描述}、$undo$、$redo$ 三种类型
执行完所有命令后,返回当前操作的描述
若执行 $undo$ 时,当前状态是从未执行过任何操作的状态,立即返回 "$undo$ $failed$",不继续执行后续命令。(注意:$undo$ 可以撤销到从未执行过任何操作的状态)
若执行 $redo$ 时无下一个操作,立即返回 "$redo$ $failed$",不继续执行后续命令
若当前状态是从未执行过任何操作,当前操作描述为空字符串 ""
输入
[["execute", "insert hello"], ["execute", "newline"], ["execute", "insert woo"], ["undo"], ["execute", "insert world"], ["undo"]]
输出
"newline"
说明
执行 $insert$ $hello$ $→$ 当前:$insert$ $hello$
执行 $newline$ $→$ 当前:$newline$
执行 $insert$ $woo$ $→$ 当前:$insert$ $woo$
撤销 $→$ 当前:$newline$(当前回滚到上一步的状态)
执行 $insert$ $world$ $→$ 当前:$insert$ $world$(清除任何后续历史)
撤销 $→$ 当前:$newline$
输入
[[]]
输出
""
说明
当前状态是从未执行过任何操作,输出: ""
输入
[["execute", "insert hello"], ["undo"]]
输出
""
说明
执行 $insert$ $hello$ $→$ 当前:$insert$ $hello$
撤销 $→$ 当前:""(当前状态是从未执行过任何操作,输出: "")
输入
[["execute","insert hello"],["undo"],["redo"]]
输出
"insert hello"
说明
执行 $insert$ $hello$ $→$ 当前:$insert$ $hello$
撤销 $→$ 当前:""
重做 $→$ 当前:$insert$ $hello$
本题要求实现一个操作历史管理器,核心在于维护一个操作序列和一个指向当前操作的指针(游标)。
ArrayList、Python 的 list)或双向链表来存储执行过的操作描述。cur 表示当前所处的操作索引。初始状态下,没有任何操作,cur = -1。cur 之后的所有历史记录(因为新操作会覆盖掉撤销后的重做路径)。cur 指向序列的最后一个元素。cur == -1,说明已经回退到初始状态,无法再撤销,返回 "undo failed"。cur 减 1。cur 已经指向序列的最后一个元素,说明没有可以重做的操作,返回 "redo failed"。cur 加 1。cur 的值返回对应的操作描述。如果 cur == -1,返回空字符串 ""。execute 时清空后续历史的开销。在最坏情况下,如果频繁在中间位置执行 execute,清空操作可能达到 $O(N)$。不过在实际应用中,如果使用链表或者仅移动尾部索引,可以优化到 $O(1)$。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。