Сложность: easy
Для заданного начала связного списка и целого числа val удалите все узлы связного списка, у которых Node.val равно val, и верните новое начало списка.
Пример:
Input: head = [1,2,6,3,4,5,6], val = 6
Output: [1,2,3,4,5]
👨💻 Алгоритм:
1⃣Инициализируйте сторожевой узел как ListNode(0) и установите его новым началом: sentinel.next = head. Инициализируйте два указателя для отслеживания текущего узла и его предшественника: curr и prev.
2⃣Пока curr не является нулевым указателем, сравните значение текущего узла со значением для удаления. Если значения равны, удалите текущий узел: prev.next = curr.next, иначе установите предшественника равным текущему узлу. Переместитесь к следующему узлу: curr = curr.next.
3⃣Верните sentinel.next.
😎 Решение:
class ListNode {
var val: Int
var next: ListNode?
init(_ val: Int) {
self.val = val
self.next = nil
}
}
func deleteNode(head: ListNode?, value: Int) -> ListNode? {
let sentinel = ListNode(0)
sentinel.next = head
var prev: ListNode? = sentinel
var curr: ListNode? = head
while curr != nil {
if curr!.val == value {
prev?.next = curr?.next
} else {
prev = curr
}
curr = curr?.next
}
return sentinel.next
}Ставь 👍 и забирай 📚 Базу знаний
