Python反转链表代码报错:'NoneType'无'next'属性,求排查与修复
问题分析与修复
报错原因
你这段代码的问题出在空链表场景:当输入的head是None(也就是链表为空)时,currentNode会被赋值为None,这时候执行while currentNode.next is not None就会直接触发'NoneType' object has no attribute 'next'的错误。另外原循环条件只处理到倒数第二个节点,虽然核心逻辑没问题,但没覆盖空链表这种边界情况。
修复方案
把循环条件改成while currentNode is not None,同时把循环外的currentNode.next=previousNode移到循环内部执行——这样不管是空链表、单节点链表还是多节点链表,都能正确处理。
修复后的代码:
class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: currentNode = head previousNode = None while currentNode is not None: temp = currentNode.next # 保存下一个节点 currentNode.next = previousNode # 当前节点指向前一个节点 previousNode = currentNode # 前一个节点后移 currentNode = temp # 当前节点后移 return previousNode # 循环结束后,previousNode就是反转后的头节点
逻辑说明
- 空链表:
currentNode一开始就是None,循环不执行,直接返回previousNode(也就是None),符合预期。 - 单节点链表:循环执行一次,把该节点的
next设为None,previousNode变成这个节点,最后返回它,正确。 - 多节点链表:每次循环把当前节点的指针反转,逐步推进,最后
previousNode会停在原链表的最后一个节点,也就是反转后的头节点,完美契合你的核心思路。
内容的提问来源于stack exchange,提问作者Aly
相关产品推荐
相关产品推荐

