237. Delete Node in a Linked List
Содержание
Условие задачи
Написать функцию, которая удаляет указанный узел из связного списка. На вход дается именно указанный узел.
пример 1
Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list should become 4 -> 1 -> 9 after calling your function.пример 2
Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list should become 4 -> 5 -> 9 after calling your function.Ограничения
- Список будет иметь как минимум два элемента
- Значение каждого узла уникально
- Указанный узел гарантированного не будет хвостом.
- Не надо ничего возвращать из функции
Решение
Перед написанием решений, стоит внимательно прочитать условие. На вход дается не список и узел для удалениея, а именно указанный узел, который необходимо удалить из списка.
Разыменование узла
В языках где мы можем работать с памятью, например не только передавать ссылки, но и разыменовывать их – можно просто разыменовать указатель на текущий узел и присвоить в него следующий узел.
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func deleteNode(node *ListNode) {
if node == nil {
return
}
if node.Next == nil {
return
}
*node = *node.Next
}Копирование
Копируем из следующего узла значение и указатель на следующий в текущий узел
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func deleteNode(node *ListNode) {
if node == nil {
return
}
if node.Next == nil {
return
}
node.Val = node.Next.Val
node.Next = node.Next.Next
}