LinkedList(l) -> 对于 l = [3, 1, 2, 3, 4, 5] 和 k = 3,输出应该是 solution(l, k) = [1, 2, 4, 5]

LinkedList(l) -> For l = [3, 1, 2, 3, 4, 5] and k = 3, the output should be solution(l, k) = [1, 2, 4, 5]

9/10个测试用例都通过了,漏洞在哪里?

给定一个整数 l 和一个整数 k 的单链表,从列表 l 中删除值等于 k ​​的所有元素。

def solution(l, k):
    len = 0
    
    l2 = l1 = ListNode(None)
    l1.next = l
    
    while l is not None:
        len = len + 1 
        l = l.next
        
    if len == 0:
        return l
    elif len == 1:
        if l1.next == k:
            return l
        else:
            return l1.next
    else:
        while l1.next is not None:
            if l1.next.value == k:
                l1.next = l1.next.next
            else:
                l1 = l1.next
    
    return l2.next

您的代码中有这些行:

    if l1.next == k:

...和:

        if l1.next.value == k:

这两个肯定有一个是错误的,因为第一个比较的是 ListNode,而另一个比较的是 ListNode value。假设k表示一个,第一个应该更正为:

    if l1.next.value == k:

其他备注

  • 不需要先统计链表的节点数
  • 链表没有节点,或者只有一个节点的情况不需要单独处理

以下是如何减少您的代码:

def solution(l, k):
    prehead = ListNode(None)
    prehead.next = l
    l = prehead
    
    while l.next is not None:
        if l.next.value == k:
            l.next = l.next.next
        else:
            l = l.next

    return prehead.next