Сложность: 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 {
public $val = 0;
public $next = null;
function __construct($val = 0, $next = null) {
$this->val = $val;
$this->next = $next;
}
}
function deleteNode($head, $value) {
$sentinel = new ListNode(0);
$sentinel->next = $head;
$prev = $sentinel;
$curr = $head;
while ($curr !== null) {
if ($curr->val === $value) {
$prev->next = $curr->next;
} else {
$prev = $curr;
}
$curr = $curr->next;
}
return $sentinel->next;
}Ставь 👍 и забирай 📚 Базу знаний
