237. Delete Node in a Linked List
Содержание
Задача
Написать функцию для удаления узла (за исключением хвостового) в односвязном списке, дан только доступ к этому узлу.
Подсказки
- Обычно, для удаления узла из односвязного списка, нам нужен доступ к предыдущему узлу. В этом случае, у нас такого доступа нет. Как это обойти?
Подход
Поскольку доступа к предыдущему узлу нет, мы не можем просто “вырезать” текущий узел. Однако мы можем переписать значение текущего узла значением следующего узла и затем удалить следующий узел.
Алгоритм
- Перезаписываем значение текущего узла значением следующего узла.
- Удаляем следующий узел.
Решение
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def deleteNode(node):
node.val = node.next.val # Перезаписываем значение узла значением следующего узла
node.next = node.next.next # Удаляем следующий узел