singlepost

Обращение (реверсирование) односвязного линейного списка << На главную или назад  

Проблема – обращение (реверсирование) односвязного линейного списка.
Элемент такого типа:

struct Ceil{
intcontent;
Ceil *Link;
};

Ceil*P;

Пример:
1 2 3 превратить в3 2 1
Много извращался, пробовал рекурсию: распечатать в обратном порядке удалось легко, а вот как _перебросить указатели_в обратном порядке?

93 ответов в теме “Обращение (реверсирование) односвязного линейного списка”

  1. 15
    Нгамдкхе Кверос ответил:

    с красивыми девочками везде хорошо,
    (это без красивых девочек плохо) :-)

    вспомнился анекдот у программиста спрашивают
    - тебя что-нибудь интересует кроме девочек и компьютеров?
    *тот задумался и ответил*
    - да, женщины и калькуляторы.

  2. 14
    Веном Кац ответил:

    А никто и не спорил… Равно как и сильные мальчики =)
    Но на ВМиКе с красивыми девочками как-то лучше =)

  3. 13
    Нгамдкхе Кверос ответил:

    протрите очки. есть на мехмате вполне себе красивые девочки… я всегда говорил что много учиться вредно.

  4. 12
    Веном Кац ответил:

    А ты, видать, сильный, раз не понял =)

  5. 11
    Пашка Джиоев ответил:

    Это где девочки красивые? На мех-мате? ))

  6. 10
    Веном Кац ответил:

    Не правильно говорите. Научить чему-то вообще говоря невозможно, можно только научиться.
    А вообще, ничего страшного. Зато девочки красивые, а мальчики сильные.

  7. 9
    Пашка Джиоев ответил:

    Вот поэтому и грустно, что так учат.

  8. 8
    Денис Гублин ответил:

    Пашка ت Джиоев

    Не грусти, все не так уж плохо) Я проявил одномоментную слабость и поленился еще чуть-чуть побольше напрячь мозги))

    К тому же (ты вряд ли сочтешь это оправданием) программированию у нас уделяют очень мало внимания: мало учат, мало задают, мало спрашивают.

  9. 7
    Веном Кац ответил:

    3/4 студентов мехмата МГУ не могут написать самостоятельно квиксорт на сях. Причём из них подавляющее большинство – механики, которым вычислениями придётся заниматься. Зачем, ведь есть матлаб и "математика"?

  10. 6
    Пашка Джиоев ответил:

    Очень грустно, что такой вопрос задает человек, учащийся на последнем курсе механико-математического факультета

  11. 5
    Денис Гублин ответил:

    Алексей Руденко
    такой способ сразу нарушает связность

    Владимир /*PVoLan, можно просто PVo*/ Шалимов
    спасибо, любопытная идея

    Нгамдкхе Кверос
    *Бурная овация* Огромное спасибо! То, что нужно. Я уж всю голову сломал, чтобы родить нечто подобное. Вопрос решен, тему можно удалять.

  12. 4
    Денис Гублин ответил:

    Всем на заметку: на личном опыте благодаря вам убеждаюсь, что грамотно заданный вопрос влечет за собой быстрый и квалифицированный ответ.
    Еще раз всем спасибо за внимание и помощь.

  13. 3
    Алексей Руденко ответил:

    хм, ну может пройти по списку, и со второго элемента начиная менять указатель вместо следующего, на предыдущий?а потом в указатель на начало списка поставить последний элемент?

  14. 2
    Владимир Шалимов ответил:

    Ceil* reverse(Ceil* p){
    if(p->Link==NULL) return p; //последний элемент списка (хвост) будет возвращен как новый начальный

    Ceil t = reverse (p->Link); //Рекурсивно разворачиваем список, кроме 1го элемента, при этом запоминаем хвост старого списка-голову развернутого списка
    p->Link->Link = p; //Собственно переброс указателя
    return t; //Возвращаем хвост старого списка-голову развернутого списка

    }

    void main(){
    Ceil* source;
    Ceil* reversed = reverse(source);
    source->Link=NULL; //Бывшую голову-новый хвост надо обрезать – не придумал, куда это впихнуть в reverse, потому отдельно.
    }

    //Писалось чайником, ногами не бить.

  15. 1
    Нгамдкхе Кверос ответил:

    Ceil *tmp,*first,*firstnew=NULL;
    <…>
    while(first)
    {tmp=first->Link;
    first->Link=firstnew;
    firstnew=first;
    first=tmp;
    }
    first = firstnew;

    как-то например так.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.