class LN:
def __init__(self,value,next=None):
self.value = value
self.next = next
def remove(ll,v):
head = ll
if head.value == v:
head = head.next
while ll.next.next != None:
if ll.next.value == v:
ll.next = ll.next.next
ll = ll.next
return head
由于某种原因,这个函数只删除了一些值而不是所有值,我怎么能修改它以便它删除所有出现的v?
谢谢!
答案 0 :(得分:1)
现有代码存在一些问题。处理列表的开头时,您必须处理列表开头有多个项目需要删除的情况。因此,您需要一个循环来代替if
,一旦您完成了它,您可以在所有项目都被删除后返回
while ll and ll.value == v:
ll = ll.next
# Return if list is depleted or was empty to begin with
if not ll:
return ll
此时您已返回或ll
指向应保留的第一个节点,即新列表的头部。由于我们需要返回头部,我们必须存储它,然后处理所有以下节点。这可以通过检查下一个节点的值来完成。如果它是v
,则可以跳过它:
# At this point ll points to head of the new list
head = ll
while ll.next:
if ll.next.value == v:
ll.next = ll.next.next
else:
ll = ll.next
return head