Алгоритмы и структуры данных: продвинутый уровень Удалить элемент из односвязного списка
Выпуск 7. Удалить элемент из односвязного списка
Здравствуйте, !
Написать функцию, которая удаляет звено (за исключением последнего) в
односвязном списке, на вход поступает только звено списка, которое необходимо
удалить.
Односвязный список - это список, состоящий из элементов, каждый из которых указывает только на следующий.
Например, список = [4,5,1,9] выглядит так:
Пример 1:
Дано: head = [4,5,1,9], node = 5
Результат: [4,1,9] Пояснение: элемент 4 раньше указывал на 5, а теперь указывает на 1, посколько 5 указывал на 1.
Пример 2:
Дано: head = [4,5,1,9], node = 1
Результат: [4,5,9]
Компилируемое решение:
/**
* Структура односвязного списка
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) { // надо удалить node, мы не знаем его предыдущего элемента, но знаем следующий
ListNode temp = node.next; // берем следующий элемент
if (temp!=null) { // если он существует
node.val = temp.val; // то наш удаляемый элемент принимает значение своего следующего
node.next = temp.next; // и будет указывать на следующий за следующим
temp = null;
} // таким образом предыдущий от node, как указывал на него, так и указывает, но сам node поменял содержание
}
}
С уважением, Наталия Македа natalia.macheda at gmail.com 2021-03-25, Trento
Внимание! Письмо, которое вы мне отправите с вопросами и коментариями по тематике данной рассылки, может быть опубликовано полностью или частично в данной рассылке, если в нём нет явного запрета на это.