|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.05.2021, 10:05 | #1 |
Пользователь
Регистрация: 16.04.2021
Сообщений: 73
|
В двухсвязном списке удалить первый и последний элемент
Здраствуйте,вот программка,первый элемент я удалил ,а как удалить последний не могу понять,вот мой код:
Код:
Последний раз редактировалось BDA; 21.05.2021 в 20:47. |
21.05.2021, 22:37 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Из del_List все-таки стоит возвращать ссылку на новую голову списка. Да и назвать саму функцию так, чтобы стало понятно, что удаляется только первый элемент. А также проверять, что список не пуст. Вместо NULL и 0 использовать nullptr. Поскольку ссылка на конец списка не поддерживается в актуальном состоянии, то удалить последний элемент можно, только пройдя список до конца и найдя его, а потом уже удалять его, аналогично del_List. Если ничего не забыл, то примерно так удалять первый и последний:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 21.05.2021 в 22:43. |
21.05.2021, 23:06 | #3 |
Пользователь
Регистрация: 16.04.2021
Сообщений: 73
|
BDA, спасибо за помощь,но скажите мы в p заносим адрес 1 элемента,дальше проходим до конца списка,заносим адрес последнего элемента в p,дальше обнуляем адреса прошлого и следующего элемента и удаляем p,правильно?
p = beg; while (p->next != nullptr) p = p->next; p->pred->next = nullptr; delete p; |
22.05.2021, 00:44 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Начало верно. Правильнее сказать, что после завершения работы цикла "p" содержит адрес последнего элемента. А обнуляем у предыдущего (предпоследнего) элемента ссылку на последний элемент. Кстати, тут закралась ошибка - если список из одного элемента, то предыдущего элемента нет.
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 22.05.2021 в 21:03. |
22.05.2021, 11:18 | #5 |
Пользователь
Регистрация: 16.04.2021
Сообщений: 73
|
BDA, Выходит так?
List * del_List (List * beg, List * end) { if (beg == nullptr) / * если в списке только один элемент * / return beg / * Возвращаем начало списка * / List * p = beg; beg = beg-> next / * переставить начало списка на следующий элемент * / if (beg! = nullptr) beg-> pred = nullptr / * обнулить адрес предыдущего элемента * / delete p; // удалить первый элемент if (beg == nullptr) / * если в списке только один элемент * / return beg; p = beg; / * Заносим в p адресов первого элемента * / while (p-> next! = nullptr) / * Если не конец списка * / p = p-> next; / * Заносим в p адрес последнего элемента * / if (p-> pred! = nullptr) / * Если в списке не один элемент * / p-> pred-> next = nullptr / * обнуляем у предыдущего элемента адрес на последний элемент * / else beg = nullptr / * Если в списке один элемент обнуляем beg * / delete p; / * Удаляем последний элемент * / return beg / * Возвращаем начало списка * / } |
22.05.2021, 21:20 | #6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удалить последний нечетный элемент массива. | София43 | Помощь студентам | 1 | 04.04.2020 11:02 |
как удалить последний элемент? | Александр121 | Python | 4 | 25.08.2018 10:50 |
В созданном списке вычислить среднее арифметическое и заменить им первый элемент | xxxmorgan | C++ Builder | 0 | 15.05.2014 22:29 |
Программа в Паскале: Дан одномерный массив С размерностью N. Переставить местами первый и последний элемент массива, если... | hars1 | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 19.03.2014 17:30 |
удалить последний элемент из списка.ООП-Классы | Otar4ik | Помощь студентам | 1 | 02.02.2014 22:36 |