Форум программистов, компьютерный форум CyberForum.ru

Реверс списка - C++

Восстановить пароль Регистрация
 
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
23.11.2012, 01:39     Реверс списка #1
Скажите пожалуйста правильна ли логика реверса
C++
1
2
3
4
5
6
7
8
9
10
11
12
void IntList::Revers()
{
   ListItem *tmp, *ptr = NULL;
   while(last->next==0)
   {
   tmp = first->next;
   first->next = ptr;
   ptr = first;
   first = tmp;
   }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
23.11.2012, 02:04     Реверс списка #2
В общем, да, но: 1) вы учли случай пустого списка? 2) first ведь в конце равен NULL, а должен получить значение ptr; 3) last меняется как-то автоматически, что он способен прервать цикл?
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
23.11.2012, 02:31  [ТС]     Реверс списка #3
Не могли бы вы написать исправленный вариант? Не догоняю(
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
23.11.2012, 03:02     Реверс списка #4
Не, так не пойдёт. Смотрите, что вам надо учесть для каждого из этих пунктов.
  1. Проверяем, если список пустой — выходим сразу же из функции.
  2. first = tmp; вот эту штуку на последней итерации делать не надо, но так как это было бы сильно геморройно делать проверку, то просто восстановите после цикла значение first из ptr; почему — попробуйте на бумажке нарисовать работу алгоритма;
  3. У вас условие цикла идёт по last->next; это в принципе сработает для остановки цикла, но ведь last вам надо переместить в конец списка после окончания цикла, а не оставить его указывать на бывший конец списка, который теперь начало. Запомните, например, перед циклом текущее начало списка, потом после цикла его присвоите last.
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
23.11.2012, 03:11  [ТС]     Реверс списка #5
Огромное спасибо!!!!!
И отдельное спасибо что не просто написали код!
Yandex
Объявления
23.11.2012, 03:11     Реверс списка
Ответ Создать тему
Опции темы

Текущее время: 04:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru