Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Инверсия списка


Автор: zmaximka 26.8.2012, 16:25
Подскажите пожалуйста, возможна ли инверсия списка без создания нового? 

Автор: DarkProg 26.8.2012, 16:39
Эммм... задача именно инвертировать? Просто на практике проще уже читать с конца, нежели тратить впустую время на то чтобы элементы перекинуть в обратный порядок...


Цитата(zmaximka @  26.8.2012,  17:25 Найти цитируемый пост)
Подскажите пожалуйста, возможна ли инверсия списка без создания нового?  

Да.
1. Берём два элемента(один сначала, второй с конца)
2. Заводим ещё одну переменную(буфер)
3. Пишем одну переменную в буфер
4. Той которой записали значений в буфер присваиваем значение второй переменной
5. второй переменной присваиваем значение буфера

P.S. элементарно же ;)

Автор: zmaximka 26.8.2012, 16:50
Смысл в том, что бы не просто значения списка инвертировать, а сами элементы списка. Задача скорее имеет учебный характер, чем прикладной.

Добавлено через 6 минут и 22 секунды
Вот одно из возможных решений:
Код

List * reverse(List *e1)
{
        if (e1 == 0) return 0;
        if (e1->next == 0) return e1;

        List * rv = reverse(e1->next);

        e1->next->next = e1;
        e1->next = 0;
        return rv;
}

Автор: DarkProg 26.8.2012, 18:52
Цитата(zmaximka @  26.8.2012,  17:50 Найти цитируемый пост)
Смысл в том, что бы не просто значения списка инвертировать, а сами элементы списка.

Т.е. есть список, но при этом обращаясь к элементу с индексом 0, получить последний?

Если так, то проще всего написать класс где держать список в нормальном варианте, а на чтение написать обёртку которая будет предоставлять нужное(я бы сделал две возможность чтения, читать в нормальном варианте и инвертированный).

P.S. на C++ давно не писал, щас с ходу не накидаю код...

Автор: Silent 31.8.2012, 10:34
посмотрите:
http://www.cyberforum.ru/cpp-beginners/thread113150.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)