Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
t1maaa
4 / 4 / 0
Регистрация: 07.01.2011
Сообщений: 15
1

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

18.05.2011, 15:28. Просмотров 1534. Ответов 3
Метки нет (Все метки)

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

Линейный Двусвязный список!
Задание:Создайте шаблон функции, которая удаляет из данного списка все...

Двусвязный линейный список
Здравствуйте. Помогите пожалуйста в написании программы: Реализовать класс...

Линейный двусвязный список
Тип элемента списка определен так: struct llist{ int val; llist...

Двусвязный линейный список
Помогите пожалуйста написать эти программы :( Двусвязный линейный список, ...

Линейный двусвязный список
Задали задачу, реализовать линейный двусвязный список, и функцию к нему -...

3
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
18.05.2011, 16:02 2
У каждой ноды надо swap(prev, next), соответственно, последний элемент станет первым, первый -- последним.
1
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);
      
  }
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
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); // ну и поменять местами хвост и голову.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2011, 22:22

Двусвязный линейный список
Мне нужно написать класс двусвязный список со всеми базовыми методами. У меня...

Двусвязный линейный список
Дан Двусвязный линейный список. ну например фамилия и имя. как сделать...

Сформировать линейный двусвязный список
Сформировать линейный двусвязный список следующим образом: генерируется два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru