You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何向ArrayDeque插入代表null的合法元素避免空指针异常

可行替代方案

以下是几种语法完全合法的实现方案,你可以结合场景选择:

  • 替换Deque实现为支持null的LinkedList
    这是对你现有代码改动最小的方案,LinkedList作为Deque接口的实现类,offer()方法允许传入null参数,仅需修改队列初始化一行代码即可:
    // 替换原来的ArrayDeque初始化
    Deque<TreeNode> queue = new LinkedList<>();
    
    其余逻辑不需要调整,即可正常运行。
  • 自定义哨兵节点代表空值
    如果你需要继续使用ArrayDeque(比如对性能有更高要求),可以基于你的业务约束(节点值范围为-100~100)定义一个全局唯一的哨兵节点代表空节点:
    // 类内部定义哨兵节点,val取超出节点合法值范围的数即可
    private static final TreeNode NULL_SENTINEL = new TreeNode(101);
    
    插入子节点时做判空替换:
    queue.offer(node.left == null ? NULL_SENTINEL : node.left);
    queue.offer(node.right == null ? NULL_SENTINEL : node.right);
    
    后续取出节点时,只需判断节点是否等于NULL_SENTINEL,即可识别是否为逻辑空节点。
  • 用Optional包装节点类型
    你也可以将队列的泛型改为Optional<TreeNode>,用标准库的Optional.empty()代表空含义:
    Deque<Optional<TreeNode>> queue = new ArrayDeque<>();
    // 插入节点时的写法
    queue.offer(Optional.ofNullable(node.left));
    queue.offer(Optional.ofNullable(node.right));
    
    取出节点时通过isPresent()方法判断是否为非空节点即可,符合Java函数式编程规范。
额外逻辑提示

你现有判断对称的逻辑还需要补充空节点的取值匹配规则,比如逻辑空节点的val要设置为不和正常节点重复的值,才能保证层序遍历时的回文校验逻辑正确。

内容的提问来源于stack exchange,提问作者Sea Bean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:02