← Static tasks

237. Delete Node in a Linked List

leetcode medium

#csharp#leetcode#linked-list#medium

Task

Дан односвязный список с головой head, и требуется удалить узел node в этом списке.

Вам дан узел node, который нужно удалить. У вас нет доступа к первому узлу head.

Все значения в односвязном списке уникальны, и гарантируется, что данный узел node не является последним узлом в списке.

Удалите данный узел. Обратите внимание, что под удалением узла мы не подразумеваем его удаление из памяти. Мы имеем в виду:

- Значение данного узла не должно существовать в односвязном списке.

- Количество узлов в односвязном списке должно уменьшиться на один.

- Все значения перед узлом должны оставаться в том же порядке.

- Все значения после узла должны оставаться в том же порядке.

Пример

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.

C# solution

matched/original
public class Solution {
    public void DeleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

C++ solution

auto-draft, review before submit
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public void DeleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

Java solution

matched/original
class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

JavaScript solution

matched/original
class Solution {
    deleteNode(node) {
        node.val = node.next.val
        node.next = node.next.next
    }
}

Python solution

matched/original
class Solution:
    def deleteNode(self, node: ListNode) -> None:
        node.val = node.next.val
        node.next = node.next.next

Go solution

matched/original
func deleteNode(node *ListNode) {
    node.Val = node.Next.Val
    node.Next = node.Next.Next
}

Explanation

Algorithm

Копирование данных: Скопируйте значение из следующего узла (

node.next

) в текущий узел (node). Таким образом, текущий узел будет иметь значение, которое было в следующем узле.

Обновление указателя: Обновите указатель next текущего узла, чтобы он ссылался на узел, следующий за узлом

node.next

. Это effectively удалит следующий узел из списка.

Удаление ссылки на следующий узел: Убедитесь, что следующий узел больше не ссылается на другие узлы, тем самым полностью исключая его из списка.

😎