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