Сложность: medium
Учитывая заголовок связанного списка, удалите n-й узел из конца списка и верните его заголовок.
Пример:
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]
👨💻 Алгоритм:
1⃣Создать фиктивный узел, который указывает на head, чтобы упростить удаление первого элемента.
2⃣Использовать два указателя: один сместить на
n шагов вперед, затем двигать оба, пока первый не достигнет конца. 3⃣Удалить нужный узел, изменив ссылки, и вернуть новый head.
😎 Решение:
class Solution {
func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
let dummy = ListNode(0)
dummy.next = head
var prev: ListNode? = dummy
var post: ListNode? = dummy
for _ in 0..<n {
post = post?.next
}
while post?.next != nil {
prev = prev?.next
post = post?.next
}
prev!.next = prev!.next!.next
return dummy.next
}
}Ставь 👍 и забирай 📚 Базу знаний