链表倒数第k个节点查找函数隐藏用例失败,报NoneType无next属性错误
链表倒数第k个节点函数问题排查与修复
报错原因
报错信息'NoneType' object has no attribute 'next'(中文翻译:'NoneType'对象没有'next'属性),是因为当k大于链表长度时,第一个for循环里fast会提前变成None,但循环仍会继续执行fast = fast.next,导致访问None的next属性。
举个例子:链表长度为3,k=5。循环执行到第4次时,fast已经是None,此时执行fast.next就会触发这个错误。
另外还存在非法输入的隐患:如果k为0或负数,现有代码也会出现逻辑错误,但触发当前报错的核心原因是k超出链表长度时的循环处理缺失。
修复后的代码
def find_kth_from_end(l, k): # 处理k为非正整数的非法情况 if k <= 0: return None slow = l.head fast = l.head for _ in range(k): # 提前判断fast是否为空,避免k超出链表长度时报错 if fast is None: return None fast = fast.next # k等于链表长度时,直接返回头节点 if fast is None: return l.head while fast.next: slow = slow.next fast = fast.next return slow.next
修复细节
- 非法输入拦截:先判断k是否为正整数,过滤k<=0的无效输入,避免后续逻辑混乱。
- 循环内判空:在第一个for循环的每次迭代中,先检查fast是否为None,若为空则说明k超过链表长度,直接返回None(可根据题目需求改为抛出异常或其他处理方式),防止访问
fast.next触发报错。 - 保留原有正确逻辑:当k有效且小于链表长度时,原快慢指针的移动逻辑是正确的,无需修改。
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

