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

如何在Java链表中实现insertprelast(插入倒数第二个节点)方法

实现insertprelast方法的解决方案

明确无法插入的场景

以下情况无法插入倒数第二个节点,需抛出ListTooSmallException:

  • 链表为空(isEmpty() == true)
  • 链表元素个数小于2(size() < 2)
  • 插入的元素为null

核心实现逻辑

利用接口提供的removeLast()、insertLast()方法,通过「移走末尾元素→插入新元素→还原末尾元素」的步骤,间接实现插入倒数第二个位置的效果:

  1. 移除原链表的最后一个元素并暂存
  2. 将新元素插入链表末尾(此时新元素暂居末尾,后续还原原末尾元素后,新元素自动变为倒数第二个)
  3. 将暂存的原末尾元素重新插入到链表末尾

完整代码实现

public void insertprelast(Object obj) throws ListTooSmallException {
    // 处理插入元素为null的情况
    if (obj == null) {
        throw new ListTooSmallException("插入元素不能为null");
    }
    // 处理链表长度不足的情况
    if (isEmpty() || size() < 2) {
        throw new ListTooSmallException("链表长度不足,无法插入倒数第二个位置");
    }
    
    // 核心逻辑
    try {
        Object lastElement = removeLast();
        insertLast(obj);
        insertLast(lastElement);
    } catch (ListEmptyException e) {
        // 提前判断过size>=2,此异常理论上不会触发,仅做兜底处理
        throw new ListTooSmallException("插入过程中出现异常:" + e.getMessage());
    }
}

逻辑验证示例

假设原链表元素为 [A, B, C]:

  1. 执行removeLast(),得到C,链表变为[A, B]
  2. 执行insertLast(obj)(假设obj为D),链表变为[A, B, D]
  3. 执行insertLast(C),链表变为[A, B, D, C],此时D正好是倒数第二个元素,符合需求

内容的提问来源于stack exchange,提问作者ek.Nik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:33:31