尝试实现一个函数,从python中的链表中删除所有出现的值

时间:2016-05-15 00:51:39

标签: python linked-list

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?

谢谢!

1 个答案:

答案 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