Python 在解决此问题时,为什么当前节点会出现属性问题?
我为链表编写了以下代码来解决这个问题:“给定链表的头和整数val,删除链表中Node.val==val的所有节点,然后返回新的头。” 例如:输入:head=[1,2,6,3,4,5,6],val=6,输出:[1,2,3,4,5]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
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
,可能已被删除nex.val
,因此应该更改条件以验证nex
不是Nonedef 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”,但这似乎并没有解决问题。请参阅更新的答案以获得澄清