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

Линейный двусвязный список - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
t1maaa
4 / 4 / 0
Регистрация: 07.01.2011
Сообщений: 15
18.05.2011, 15:28     Линейный двусвязный список #1
Список задан структурой
C++
1
2
3
4
5
6
struct *node
{
char info;
node *prev;
node *next;
};
и была введена некоторая последовательность чисел. Нужно расположить элементы списка в обратном порядке не применяя копирования.
Натолкните на мысль или примерный алгоритм подскажите)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 15:28     Линейный двусвязный список
Посмотрите здесь:

C++ Двусвязный линейный список
C++ Двусвязный линейный список
C++ Линейный двусвязный список
Переделать двусвязный список в двусвязный кольцевой C++
C++ Линейный двусвязный список
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
18.05.2011, 16:02     Линейный двусвязный список #2
У каждой ноды надо swap(prev, next), соответственно, последний элемент станет первым, первый -- последним.
t1maaa
4 / 4 / 0
Регистрация: 07.01.2011
Сообщений: 15
18.05.2011, 20:42  [ТС]     Линейный двусвязный список #3
За swap спасибо.
как грамотно поменять указатели до меня так не дошло, зато появилась мысль просто поля info менять. На начало(top) и конец(tail) ставиться по указателю, обмениваются info полями, через вспомогательные указатели(k,t) и движутся навстречу друг другу. Сначала обмен происходит нормально, но когда меняются рядомстоящие центральные элементы(если четное число элементов) либо оба указателя на центральном элементе(при нечетном), указатель движущийся с конца(tail) теряется..

C++
1
2
3
4
5
6
7
8
9
   while (top->next!=tail || tail->prev!=top || top!=tail || right!=NULL || top!=NULL)
  {
      k=top;
      t=tail;
      top=top->next;
      tail=tail->prev;
      swap(k->info,t->info);
      
  }
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
18.05.2011, 22:22     Линейный двусвязный список #4
Вот как-то так.
C++
1
2
3
4
5
6
7
node *pointer = top; // первый элемент
while (pointer != NULL) {
  node *next = pointer->next; // запомним следующий элемент
  swap(pointer->prev, pointer->next); // поменяем местами следующее и предыдущее значение
  pointer = next; // следующий элемент
}
swap(top, tail); // ну и поменять местами хвост и голову.
Yandex
Объявления
18.05.2011, 22:22     Линейный двусвязный список
Ответ Создать тему
Опции темы

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