单链表去重代码外层循环含current!=null的原因疑问
为什么移除单链表重复元素的代码要保留
current != null在循环条件里? 你测试的1->2->3->null这种正常链表场景下,current != null确实显得多余——毕竟初始current指向头节点(非空),循环又判断了current.nextNode != null,current看起来永远不会为null。但这个条件是为了覆盖异常边界场景,避免代码崩溃,具体原因如下:
- 处理空链表输入:如果传入的链表本身就是
null(头节点为空),初始current就是null。这时候如果循环条件只有current.nextNode != null,直接访问current.nextNode会立刻抛出NullPointerException。加上current != null后,循环直接跳过,代码能安全处理空链表的情况,不会崩溃。 - 应对逻辑变动后的潜在风险:假设后续有人修改去重逻辑,比如不小心在循环里把current置为null,或者某种极端去重场景下current提前变成null(比如链表所有元素都重复,最后current被置空),
current != null能避免后续访问current.nextNode时触发空指针。 - 提升代码可读性与健壮性:明确写出这个条件相当于给其他读代码的人传递一个信号:这段代码考虑了current为空的边界情况。即使当前逻辑用不到,也能为未来的代码修改预留安全缓冲,避免引入新的bug。
举个简单反例:如果传入空链表,没有current != null的话程序直接报错;加上这个条件,程序会正常返回空链表,符合预期。
内容的提问来源于stack exchange,提问作者isilia
相关产品推荐
相关产品推荐

