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

自定义LinkedList批量移除指定课程名员工问题求助

批量删除自定义LinkedList中同课程名员工的解决方案

问题分析

  • 已实现按编号单个删除员工功能,但无法批量移除所有课程名相同的员工
  • 自定义clear方法无效,说明链表节点的重置或遍历逻辑存在问题

核心实现思路

批量删除的关键是遍历链表时正确维护节点的前驱与后继关系,避免因删除节点导致遍历中断或遗漏:

  • 用两个指针分别跟踪当前节点和前驱节点
  • 匹配课程名时,调整前驱节点的next指针跳过当前节点,同时处理头节点被删除的特殊场景
  • 仅当未删除节点时,才移动前驱指针;删除节点后直接将当前指针跳转到下一个节点即可

批量删除方法代码

假设你的Employee类包含getCourseName()方法用于获取课程名,在自定义LinkedList类中添加如下方法:

public void removeAllByCourseName(String targetCourse) {
    LinearNode<Employee> current = head;
    LinearNode<Employee> prev = null;

    while (current != null) {
        Employee currentEmp = current.getElement();
        if (targetCourse.equals(currentEmp.getCourseName())) {
            // 处理头节点删除
            if (prev == null) {
                head = current.getNext();
            } else {
                // 处理中间/尾节点删除
                prev.setNext(current.getNext());
            }
            // 直接跳转到下一个节点,prev保持不动
            current = current.getNext();
        } else {
            // 未匹配,同时移动前驱和当前节点
            prev = current;
            current = current.getNext();
        }
    }
}

修复无效的clear方法

如果你的clear方法无效,通常是因为没有正确重置链表的核心属性,修复示例如下:

public void clear() {
    head = null;
    // 若你的链表维护了size和tail属性,同步重置
    size = 0;
    tail = null;
}

测试注意事项

  • 覆盖边界场景:空链表、所有节点均需删除、仅头节点需删除、仅尾节点需删除、中间节点需删除
  • 确保Employee类的getCourseName()方法返回值正确,避免匹配逻辑错误
  • 遍历过程中避免空指针异常,确保节点的getNext()和getElement()调用安全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:40:41