#java #algorithm #data-structures
#java #алгоритм #структуры данных
Вопрос:
В интервью меня попросили узнать значение во 2-м узле из среднего узла связанного списка? Они ожидали, что сделают это за O (n) временных затрат.
Я попытался дать ответ, чтобы получить средний элемент, используя O (n2). Но это не могло сильно помочь. Затем попытался сделать в O (n), используя медленные и быстрые указатели.
Узел медленный, быстрый;
while (slow.next != null and fast.next.next != null){
}
Например. Введите связанный список: 1 2 3 4 5 6 7 8 9
Выходной узел: 7
Потому что средний узел является 5
, а 2-й элемент из него является 7
.
Решения высоко ценятся.
Комментарии:
1. добро пожаловать в stack overflow.. Сначала покажите, что вы пробовали… где ваш код, а затем спросите, что вы хотите?
Ответ №1:
Node getSecondAfterMind(Node head) {
Node slow = head, fast = head;
while(fast.next.next != NULL) {
slow = slow.next;
fast = fast.next.next;
}
if slow.next!= NULL amp;amp; slow.next.next != NULL {
return slow.next.next;
}
return NULL;
}
Ответ №2:
Одним из решений может быть:
- Выполните итерацию по связанному списку от начала до конца и поместите ссылку на каждый элемент в
List
. - Когда вы нажмете на конец связанного списка, найдите индекс (
i
) среднего элемента на основе размера списка. - Увеличьте этот индекс на 2 (
i 2
). - Следуйте ссылке из списка по индексу
i 2
- Вы получили элемент.
Ответ №3:
Другим решением может быть повторение связанного списка напрямую, если у вас есть переменная, которая содержит размер связанного списка.
- Получите средний индекс, разделив размер на 2
- Увеличьте этот индекс на 2 (назовем его
midPlusTwo
) - Повторите связанный список и создайте счетчик.
- Остановитесь, когда счетчик будет равен
midPlusTwo
Ответ №4:
Подход заключается в том, чтобы найти узел в середине связанного списка, используя метод медленно-быстрого указателя. Затем просто найдите следующий узел следующего узла среднего узла.
Таким образом, вы можете получить требуемый узел за O (1) пространство и O (N) временную сложность.
@sourabh1024 написал код. Взгляните.