LinkedList(l) -> 对于 l = [3, 1, 2, 3, 4, 5] 和 k = 3,输出应为 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。假设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

最新更新