Python 在解决此问题时,为什么当前节点会出现属性问题?

Python 在解决此问题时,为什么当前节点会出现属性问题?,python,linked-list,Python,Linked List,我为链表编写了以下代码来解决这个问题:“给定链表的头和整数val,删除链表中Node.val==val的所有节点,然后返回新的头。” 例如:输入:head=[1,2,6,3,4,5,6],val=6,输出:[1,2,3,4,5] def removeElements(self, head: ListNode, val: int) -> ListNode: curr = head nex = head.next while curr.val

我为链表编写了以下代码来解决这个问题:“给定链表的头和整数val,删除链表中Node.val==val的所有节点,然后返回新的头。”

例如:输入:head=[1,2,6,3,4,5,6],val=6,输出:[1,2,3,4,5]

def removeElements(self, head: ListNode, val: int) -> ListNode:
        curr = head
        nex = head.next


        while curr.val == val: 
            curr = nex 
            nex = nex.next

        while curr:
            if nex.val == val:
                curr.next = curr.next.next
                curr = curr.next.next
                nex = curr.next

            else:
                curr.next = nex
                curr = curr.next
                nex=nex.next
        
        return head
出于某种原因,我在“curr=curr.next.next”行中得到了一个“AttributeError:NoneType没有属性“next”

现在,虽然我理解了这个问题,但我不明白为什么会出现这个问题,因为如果curr=None,“while curr”行不会导致while循环中断


有人能指出错误并提出解决方案吗?谢谢

你是对的,
curr
在那一行不是None,但是
curr.next
可能是None,因此
curr.next.next
试图从None访问next,因此属性错误

您可以通过尝试改进以下几点:

  • 第一个
    while
    循环尝试跳过列表的前面(如果它等于值),但函数返回的
    head
    ,可能已被删除
  • 在第二个while循环中,由于if语句正在访问
    nex.val
    ,因此应该更改条件以验证
    nex
    不是None
  • 一个示例修复程序:

    def removeements(self,head:ListNode,val:int)->ListNode:
    #角落案例-列表可能为空
    如果head为无:
    回流头
    #如果匹配,则跳过列表前面的节点
    新头
    而newHead和newHead.val==val:
    newHead=newHead.next
    #角落案例:列表现在可能为空
    如果不是newHead:
    返回新头
    curr=newHead
    nex=当前下一个
    而国家执行:
    如果nex.val==val:
    curr.next=nex.next
    nex=nex.next
    其他:
    curr=nex
    nex=nex.next
    返回新头
    
    嗨,对不起,我不明白修复方法,你是什么意思?我尝试将代码修改为“whilecurr和curr.next”,但这似乎并没有解决问题。请参阅更新的答案以获得澄清