Вопрос:
Учитывая односвязный список целых чисел 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 ссылка.