单链表删除元素代码无法删除索引0位置节点,需要如何修改?
单链表索引0节点删除问题修复方案
问题根因
你当前的代码逻辑是通过定位待删除节点的前驱节点,修改前驱节点的next指针完成删除,而索引为0的头节点不存在前驱节点,现有循环判断条件(currentIndex + 1) == index最小匹配的index是1,完全覆盖不到index=0的场景。
调整步骤
只需要在原有逻辑之前新增头节点的特殊判断分支即可:
- 先做基础合法性校验,避免空指针或非法索引
- 单独判断如果待删除索引为0,直接修改头节点指向,完成删除
- 原有处理非0索引的逻辑保持不变即可
修改后完整代码
// 前置合法性校验:索引不能小于0,不能大于等于链表总长度 if (index < 0 || index >= size) { return false; } // 单独处理索引为0的头节点删除场景 if (index == 0) { head = head.next; size--; return true; } // 原有处理非0索引的逻辑保持不变 Node<E> current = head; int currentIndex = 0; while (current.next != null) { if ((currentIndex + 1) == index) { Node<E> newNext = current.next.next; current.setNext(newNext); size--; return true; } current = current.next; currentIndex++; } return false;
核心调整说明
- 新增的index=0分支直接修改head引用指向原头节点的下一个节点,不需要遍历即可完成头节点删除
- 新增的前置合法性校验可以避免index越界引发的空指针异常,同时兼容空链表的删除场景
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

