Маслятки, держите видосик про односвязные списочки. Предлагайте темы новых видео в комментариях.
Пікірлер: 30
@user-pk7jx1xw4i3 жыл бұрын
Видео топ. Сделай пожалуйста гайд по тому, как ливать с курсов от крупных компаний)
@BCEMCPATb2 жыл бұрын
А в чем проблема? Я просто хочу пойти на курсы в компании..
@sashapushkov5 ай бұрын
Если в списке будет несколько повторяющихся чисел (1,2,2,7,26), то при вызове метода remove удалится только последний элемент :(
@viktorshvidkiy67139 ай бұрын
в методе remove не проверяется последний элемент списка, ведь его поле next как раз равно null и тело цикла не выполнится
@user-nw5tx9xk3j2 жыл бұрын
Спасибо огромное!!!
@kacatuk8442 жыл бұрын
Ты с СумДУ?)
@user-nw5tx9xk3j2 жыл бұрын
@@kacatuk844 да)
@nataljaroehm4754 Жыл бұрын
Добрый вечер. Как реализовать метод: получение элемента по индексу public int get(int index). Заранее спасибо
@kacatuk8442 жыл бұрын
Если хранить в объекте последний узел списка (например переменная lastNode), то мы можем добавлять новые элементы за 0(1), просто присваивав новый узел в поле next последнего (только нужно не забыть потом сказать что последний узел теперь - это тот, который только что добавили). И еще важно при удалении учитывать, что мы можем удалить последний элемент, тогда в переменную lastNode нужно будет положить предыдущий элемент.
@karma_kyn11488 ай бұрын
бро думаю в remove в условие while тебе не нужно current.next лучше будет скорее всего просто current (последний элемент не будет удалятся)
@karma_kyn11488 ай бұрын
если я не прав то прости
@MK-jf4ty3 жыл бұрын
Приветствую! Можешь сделать видос про полную реализацию очереди. Поиграться с поведением так сказать.
@kacatuk8443 жыл бұрын
Хорошо, в скором времени будет. Будем основываться на коде с этого видео
@kacatuk8443 жыл бұрын
Привет! Вот новое видео: kzbin.info/www/bejne/fnfIemqQo7WSkM0
@ivansuvorov83032 жыл бұрын
посыпался на первом тесте) если в конце будут одинаковые данные, к примеру 1 8 8 8 8 8, то remove не уберет все восьмерки, оставит половину. решил созданием аррейлиста в который при методе add добавлял текущий узел, а в remove изначально сказал пройтись по этому листу. чувствую что решение не самое умное, но это сработало
@ivansuvorov83032 жыл бұрын
получается что при узлах data(next) ... 8(8) 8(8) 8(8) 8(8) 8(8) ... ссылки на следующий элемент меняются с 8 на 8, но маркировать ссылки мне показалось сложнеее чем создать листок
@user-pn4fu6of3r6 ай бұрын
нашла решение более короткое: в while в классе remove вместо двух строк, перекидывающих текущий и предыдущий объекты на следующие, добавляем такой if: if (currentNode.data != data) { previousNode = currentNode; } currentNode = currentNode.next; вроде как проблему полностью решает
@artem54513 жыл бұрын
Привет, будет ли видио про двухсвязный список и нужно ли вводить переменную количество нодов?
@kacatuk8443 жыл бұрын
Привет, если нужно видео про двусвязный список - сделаю. Насчет переменной количества, если логика твоего приложения требует знать длину списка - то да. Например, если доступ осуществляешь по индексу, то - да. Если ты будешь хранить пары-значения, и доступ по ключу, то - нет.
@AB-ku1su2 жыл бұрын
Добрейший вечерочек. Как зациклить этот список, как определить что он зацикленный?
@kacatuk8442 жыл бұрын
Чтобы зациклить список, нужно чтобы последний элемент указывал не на NULL, а на голову списка.
@amoriblain36552 жыл бұрын
Есть ли способ удалить элемент из односвязного списка за О(1)? При условии, что у нас есть указатель на удаляемый элемент.
@starlord02082 жыл бұрын
Если в узле мы будем хранить информацию не только о следующем, но и предыдущем элементе - да. Но тогда это уже двухсвязный (двунаправленный) список )
@artem54513 жыл бұрын
Для чего в методе удаления предыдущий равен текущему , а текущий следующему, какой функционал этого?
@kacatuk8443 жыл бұрын
Смотри, допустим нам нужно удалить элемент с значением "3", из списка [1, 4, 6, 3, 8]. Чтобы это сделать нам нужно чтобы узел со значением "6" стал указывать не на "3", а на "8", таким образом в списке на узел с "3" уже ничего указывать не будет. (Саму память освободит сборщик мусора Java, нам не нужно явным образом, как допустим в С++, потом еще и освобождать память узла "3"). Но сначала, нам же нужно как то прийти к узлу "6", потому что изначально мы имеем доступ только к голове списка. Нам метод remove принимает "3", и с головы списка идет по списку, пока не встретит "3". И чтобы удалить, как я уже писал, нужно чтобы предыдущий указывал на следующий. Для этого нам и нужно хранить предыдущий узел. Если бы список был двусвязным, было бы проще.
@artem54513 жыл бұрын
@@kacatuk844просто вы же удаляете в цикле if( при условии если дата равна) а вот после if в теле while для чего previusNode = currentNode; current = current.next; вот для чего это тут не понятно, если удаление происходит в if;
@Opelmeister2 жыл бұрын
@@artem5451 это перемещение по списку
@kacatuk8442 жыл бұрын
@@artem5451 Смотри, нужный для удаления элемент может быть не первый в списке, а скажем, четвертый. И чтобы удалить четвертый элемент, нам нужно от головы списка, пройтись до него. И также для удаления нам нужен 3 элемент, чтобы его ссылка на следующий указывала на 5. Советую просто прогнать программу в дебаггере, и все станет на свои места.