Сложность: medium
Дан связанный список и число
n. Нужно удалить n-й узел с конца и вернуть голову изменённого списка.
Пример:
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]
👨💻 Алгоритм:
1️⃣ Создаем фиктивный узел
dummy, указывающий на head. Инициализируем два указателя — fast и slow на dummy. 2️⃣ Сдвигаем
fast на n шагов вперёд. Затем двигаем
fast и slow одновременно, пока fast не дойдёт до конца списка. 3️⃣ В этот момент
slow.next указывает на узел, который нужно удалить. Обновляем
slow.next, чтобы пропустить этот узел. Возвращаем dummy.next как новую голову.😎 Решение:
var removeNthFromEnd = function (head, n) {
const dummy = new ListNode(0, head);
let fast = dummy, slow = dummy;
while (n--) {
fast = fast.next;
}
while (fast.next) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return dummy.next;
};Ставь 👍 и забирай 📚 Базу знаний
