如何在Java链表中实现insertprelast(插入倒数第二个节点)方法
实现
insertprelast方法的解决方案 明确无法插入的场景
以下情况无法插入倒数第二个节点,需抛出ListTooSmallException:
- 链表为空(
isEmpty() == true) - 链表元素个数小于2(
size() < 2) - 插入的元素为
null
核心实现逻辑
利用接口提供的removeLast()、insertLast()方法,通过「移走末尾元素→插入新元素→还原末尾元素」的步骤,间接实现插入倒数第二个位置的效果:
- 移除原链表的最后一个元素并暂存
- 将新元素插入链表末尾(此时新元素暂居末尾,后续还原原末尾元素后,新元素自动变为倒数第二个)
- 将暂存的原末尾元素重新插入到链表末尾
完整代码实现
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]:
- 执行
removeLast(),得到C,链表变为[A, B] - 执行
insertLast(obj)(假设obj为D),链表变为[A, B, D] - 执行
insertLast(C),链表变为[A, B, D, C],此时D正好是倒数第二个元素,符合需求
内容的提问来源于stack exchange,提问作者ek.Nik
相关产品推荐
相关产品推荐

