Вопрос:

Учитывая односвязный список целых чисел l и целое число k, удалите из списка l все элементы со значением, равным k.

Отвечать:

Во-первых, нам нужно будет зациклить весь список l, не теряя ссылку из первого элемента l, поэтому необходимо создать другую переменную, указывающую на l.

# Singly-linked lists are already defined with this interface:
# class ListNode(object):
#   def __init__(self, x):
#     self.value = x
#     self.next = None
def solution(l, k):
    li = l

Теперь нам нужно создать петлю. Просто while какое-то время.

# Singly-linked lists are already defined with this interface:
# class ListNode(object):
#   def __init__(self, x):
#     self.value = x
#     self.next = None
#def solution(l, k):
    li = l
    while li:

Нужно будет проверить, существует ли следующий элемент и равен ли он k.

# Singly-linked lists are already defined with this interface:
# class ListNode(object):
#   def __init__(self, x):
#     self.value = x
#     self.next = None
#def solution(l, k):
    li = l
    while li:
        if li.next and li.next.value == k:

Если это правда, мы удалим этот элемент из связанного списка, указав текущий элемент на следующий из следующего элемента.

# Singly-linked lists are already defined with this interface:
# class ListNode(object):
#   def __init__(self, x):
#     self.value = x
#     self.next = None
#def solution(l, k):
    li = l
    while li:
        if li.next and li.next.value == k:
            li.next = li.next.next

Если это False, нам нужно перейти к следующему элементу в списке.

# Singly-linked lists are already defined with this interface:
# class ListNode(object):
#   def __init__(self, x):
#     self.value = x
#     self.next = None
#def solution(l, k):
    li = l
    while li:
        if li.next and li.next.value == k:
            li.next = li.next.next
        else:
            li = li.next

Есть угловой шкаф. Мы еще не проверяем первый элемент. Мы можем сделать эту проверку перед возвратом l. Если первый элемент равен k, мы вернем второй элемент. Если оно не равно, мы вернем l.

# Singly-linked lists are already defined with this interface:
# class ListNode(object):
#   def __init__(self, x):
#     self.value = x
#     self.next = None
#def solution(l, k):
    li = l
    while li:
        if li.next and li.next.value == k:
            li.next = li.next.next
        else:
            li = li.next
     
    return l.next if l and l.value == k else l

CodeSignal ссылка.