Это упрощенная реализация листа, она не учитывает итерируемость, которую возможно добиться только при внесении в программу фейковой ноды и зацикливании листа на последнюю. она и будет являться стопором для итератора, который нужно будет прописать в виде внутреннего класса и переопределить в нём операторы ++ -- и тп
@@kafffka_ просто писать вместо Node* void, потом название функции и параметры. И возвращать ничего не нужно. Если хотите, например, вывести что-то, то просто пишите cout и так далее. Советую вам ознакомиться с тем, как работают функции. Потому что такой вопрос при изучении списков уже появляться...не должен.
А почему в методе get_at не выполняется условие откуда начинать поиск, с head или с tail? Если надо найти последний элемент, у вас всё равно начнётся поиск с начала и до конца. Тогда в чём смысл, если можно просто использовать односвязный список?
push_front ptr->next = head голова это же первый, там разве не должно быть tail и условие if (head != NULL) head ->prew = ptr не понятно объясните, пожалуйста
1. Зачем тебе tail? Чтобы добавить перед какой-то записью новую запись, необходимо сделать так, чтобы у новой записи был "путь" к элементу, который был первый до этого. Для этого и делается ptr->next = head. Можно попробовать нарисовать это самостоятельно, если не понятно 2. Данное условие нужно для связи старого первого элемента с новым. А если head == NULL, то и связывать их не за чем.
не надо было бы удалять объект создать новый указатель, который ссылался бы на предыдущий хвост и возвращать его функция была бы: Node *pop_back() { ... return obj }
Автор, ты спас мою лабу!)) Спасибо большое, преподавателя вообще не понимал, а ты все классно объяснил!
Замечательное, подробное объяснение!!! Спасибо за урок!
Спасибо !!! Урок просто Суперский !!!
Благодарю! Хороший урок, всё доступно объяснил
Прекрасное видео. Боьшое спасибо
Потрясающий урок) Спасибо!
Автор огромное спасибо, помог разобраться
Это упрощенная реализация листа, она не учитывает итерируемость, которую возможно добиться только при внесении в программу фейковой ноды и зацикливании листа на последнюю. она и будет являться стопором для итератора, который нужно будет прописать в виде внутреннего класса и переопределить в нём операторы ++ -- и тп
Спасибо за видео❤❤❤❤
Подскажите, пожалуйста, для чего мы сделали реализацию методов push_front и push_back с возвращаемым значением?
исключительно для удобства, вдруг нужно будет использовать только что добавленные объекты
@@selfedu_rus Спасибо!
Подскажите, пожалуйста, почему какие то методы сделаны через void, а какие то через Node* ?
какие то методы класса,что возвращают объект того класса(в нашем случае Node),а если void то метод ничего не возвращает
@@kafffka_ просто писать вместо Node* void, потом название функции и параметры. И возвращать ничего не нужно. Если хотите, например, вывести что-то, то просто пишите cout и так далее. Советую вам ознакомиться с тем, как работают функции. Потому что такой вопрос при изучении списков уже появляться...не должен.
А почему в методе get_at не выполняется условие откуда начинать поиск, с head или с tail? Если надо найти последний элемент, у вас всё равно начнётся поиск с начала и до конца. Тогда в чём смысл, если можно просто использовать односвязный список?
да, согласен, здесь можно оптимизировать этот момент
push_front
ptr->next = head
голова это же первый, там разве не должно быть tail
и условие if (head != NULL)
head ->prew = ptr
не понятно
объясните, пожалуйста
1. Зачем тебе tail? Чтобы добавить перед какой-то записью новую запись, необходимо сделать так, чтобы у новой записи был "путь" к элементу, который был первый до этого. Для этого и делается ptr->next = head. Можно попробовать нарисовать это самостоятельно, если не понятно
2. Данное условие нужно для связи старого первого элемента с новым. А если head == NULL, то и связывать их не за чем.
просто мы добавляем элемент не после головы, а перед ней
Здравствуйте, не совсем понял, зачем прописывать 2 поля public в одном классе? Это для удобства чтения?
да
А если бы надо было, чтобы pop_front возвращал значение, какие изменения пришлось делать?
не надо было бы удалять объект
создать новый указатель, который ссылался бы на предыдущий хвост и возвращать его
функция была бы:
Node *pop_back() {
...
return obj
}
а есть текст кода?
нет, не выкладывал
Сделай для записи видео светлый экран, на темном не видно ничего
Проводил опрос, для 80% лучше темный.
@@selfedu_rus Однозначно лучше темный. Иначе глаза будут болеть
Светлый долбит в глаза не приятно...
тёмный однозначно лучше