StringsLinkedList, часть 2

  • 14
  • Недоступна
Решая эту задачу, ты научишься извлекать элемент из двусвязного списка. Мы реализовали метод add, который добавляет элементы в конец списка. Тебе нужно реализовать метод get(int), который вернет строку под индексом, переданным в метод. Если строки с таким индексом нет, нужно вернуть null. Помни, чт
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (33)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Глеб
Уровень 13, Минск, Belarus
15 января, 23:27
Почитал комментарии, понял что мое решение выдает неверный ответ если индекс меньше нуля, но валидатор принял. Прописывал работу кода только для 0 (отдельно), всех значений в границах списка, значения которые больше чем список.
Александр Огарков
Уровень 28, Мытищи, Россия
6 января, 12:29
В правильном решении при списке в миллион элементов и поиска по индексу -1, мы сначала пройдемся по списку полностью, а потом выведем null. Это решается просто, первой строкой в методе проверяем что индекс не меньше 0:
if (index < 0) return null;
С другой стороны, если передать индекс миллион, который также выходит за границы списка, - мы так же пройдемся по нему полностью, прежде чем передать null. Чтобы обойти эту нелепость, нужно создать перемененую size, и инкрементить её при добавлении элемента в список.
if (index < 0 || index >= size) return null;
К сожалению, такой подход валидатор уже не пропустит. Принцип KISS (Keep It Simple, Stupid) в действии)
Владимир Сергеевич
Уровень 15, Russian Federation
18 декабря 2021, 11:48
В описании нет контрольного примера.
Евгений
Уровень 19, Москва
2 декабря 2021, 13:53
Было бы круто, если бы авторы задач, в верном решении, прописывали хотя бы кратко, в виде комментариев, разбор решения.
Сергей Дрогунов
Уровень 22, Анапа
5 января, 10:59
Прописываю сам после решения (На решение в ответе)
Fleser
Уровень 22, Днепр, Ukraine
20 ноября 2021, 19:06
В решении авторов есть один минус. Если передать отрицательный аргумент в метод get, то цикл пробежится по всему списку и вернет null. Если элементов списка очень много, то может приводить к проблемам с производительностью. В этом случае нужно вынести проверку на отрицательный аргумент в начало метода.
kitikit
Уровень 15, Санкт-Петербург
22 октября 2021, 16:03
Кто-нибудь пробовал с допомогою try/catch решить эту задачу? Я первый раз когда делал, сразу try/catch запилил, но валидатор не пропустил. Потом по другому начал делать, и понял, что нужно было еще на отрицательные индексы проверку сделать, и уже сдал на валидацию. Теперь интересно, если бы совместил try/catch с проверкой на отрицательные индексы - принял бы валидатор такое решение?
16 сентября 2021, 14:08
Есть вопрос: зачем в классе StringLinkedList создали статический вложенный класс Node, если у основного класса нет статических переменных? public static class Node { private Node prev; private String value; private Node next; }
Виноградина
Уровень 48, Berkeley, United States
31 августа 2021, 04:53
народ проверяйте на индекс меньше нуля
Artem.A. #2833122
Уровень 18, Новосибирск, Russian Federation
8 декабря 2021, 13:12
Спасибо тебе огромное! После всех этих методов сложных... крыша настолько поехала, что про отрицательные значения index забыл вообще
Anonymous #2707617
Уровень 6, Москва
17 августа 2021, 20:34
Коллеги, предлагаю проверку на такую строчку в конце метода убрать, а проверять именно результат выполнения.
return null;
Gefest
Уровень 10, Минск, Беларусь
17 августа 2021, 20:00
Вот мой код:
public String get(int index) {
    Node node = first.next;
    for (int i = 0; i < index; i++){
        if (node == last) return null;
        node = node.next;
    }

    return node.value;
}
А вот "правильный" ответ:
public String get(int index) {
    int currentIndex = 0;
    Node currentElement = first.next;
    while ((currentElement) != null) {
        if(currentIndex == index) {
            return currentElement.value;
        }
        currentElement = currentElement.next;
        currentIndex++;
    }
    return null;
}
И чем мой код хуже?
Gefest
Уровень 10, Минск, Беларусь
17 августа 2021, 20:05
Я даже больше скажу. В правильном решении баг -- при добавлении элемента со значением null метод get() не будет работать при индексах выше индекса элемента со значением null.
Виноградина
Уровень 48, Berkeley, United States
31 августа 2021, 04:51
a что твоя прога выдаст при индексе -1? если фор не отработает у тебя всегда будет возвращаться значение валью в первом элементе
Runner76rus
Уровень 20, Ярославль, Россия
12 сентября 2021, 11:27
Бага нет . Даже если ты добавишь null в метод add(String value), то элемент типа Node всё равно создастся, а null положиться в value.
Denis
Уровень 32, Краснодар, Russian Federation
13 сентября 2021, 20:44
Твой код выдаст NullPointerException, если вызвать "get()", когда "first.next == null", т.е. если вызвать "get()" до добавления объектов в цепочку. Закомментируй все "add" в классе Solution и запусти.