Форум программистов, компьютерный форум, киберфорум
Наши страницы

Реверс двусвязного списка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Калькулятор Z-1. Укажите на ошибку в программе к задаче http://www.cyberforum.ru/cpp-beginners/thread1242229.html
Уважаемые форумчане, укажите пожалуйста на ошибку в программе. Пишу программу к задаче, валится на 10 тесте (Wrong Answer). Подскажите, пожалуйста, что не так. Условие задачи: Имя входного...
C++ Проверить можно ли ходом короля из одной клетки попасть в другую Делать было нечего решил все простые задачи перерешать с сайта. Ближе к делу: Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе –... http://www.cyberforum.ru/cpp-beginners/thread1242224.html
C++ Как удалять определенные значения из массива?
Пишу программу по одной задаче, в которой требуется удалить элементы, значение которых меньше среднего арифметического динамического массива. Думал, элемент возможно удалить с помощью delete", но это...
C++ Fopen не видит путь к файлу
#include <stdio.h> #include <iostream> #include <fstream> #include <string> #include <vector> #include <map> typedef std::map<std::string, std::string> mapss; // An unsigned char can store...
C++ Почему visual studio 2008 не видит директиву #include <iostream> http://www.cyberforum.ru/cpp-beginners/thread1242200.html
Здравствуйте! Помогите пожалуйста с решением проблемы. Проблема стоит в том что мой компилятор не видит #include <iostream> и требует ввести "stdafx.h" но если я ее ввожу то у меня перестает видить...
C++ Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки Доброго времени суток. Подскажите пожалуйста алгоритм или путь к решению задачи, используя СТЕК Дана ПСП, ваша задача для каждой открывающей скобочки найти позицию ей соответствующей закрывающей... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.08.2014, 14:06
Цитата Сообщение от MousePro Посмотреть сообщение
получилось что надо хранить копию данных и копию адреса 1 узла да еще и копировать все в ручную поэлементно. Выглядит очень громоздко...
Да вроде не очень:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/////////////////////////////////////////////////////////////////////////////////////////
//написать функцию реверса двусвязного списка
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <utility>
/////////////////////////////////////////////////////////////////////////////////////////
template< typename  T_key >
struct  T_node
{
    //-----------------------------------------------------------------------------------
    T_key       key_;
    T_node  *   prev_;
    T_node  *   next_;
    //-----------------------------------------------------------------------------------
    T_node
        (
            T_key       key     =   T_key(),
            T_node  *   prev    =   nullptr,
            T_node  *   next    =   nullptr
        )
        :
        key_    ( key   ),
        prev_   ( prev  ),
        next_   ( next  )
    {}
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
template< typename  T_key >
class   T_list
{
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    typedef T_node  < T_key >       T_node_type;
    typedef T_node_type         *   T_link;
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    T_link  head_;
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    T_list()
        :
        head_()
    {}
    //-----------------------------------------------------------------------------------
    void    push_front( T_key   const   &   key )
    {
        head_   =   new     T_node_type
                                (
                                    key,
                                    nullptr,
                                    head_
                                );
 
        if( head_->next_ != nullptr )
        {
            head_->next_->prev_     =   head_;
        }
    }
    //-----------------------------------------------------------------------------------
    void    print()
    {
        T_link  temp_node_ptr   =   head_;
 
        while   (
                    temp_node_ptr   !=  nullptr
                )
        {
            std::cout   <<  temp_node_ptr->key_
                        <<  '\t';
 
            temp_node_ptr   =   temp_node_ptr->next_;
        }
        std::cout   <<  std::endl;
    }
    //-----------------------------------------------------------------------------------
    void    reverse()
    {
        if( head_ == nullptr )
        {
            return;
        }
 
        for(;;)
        {
            std::swap
                (
                    head_->prev_,
                    head_->next_
                );
 
            T_link  prev    =   head_->prev_;
 
            if( prev == nullptr )
            {
                break;
            }
 
            head_   =   prev;
        }//for
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_list<int>     int_list;
    const   int     LIST_SIZE   =   10;
 
    for( int  i = 0; i < LIST_SIZE; ++i )
    {
        int_list.push_front(i);
    }//for
 
    int_list.print      ();
    int_list.reverse    ();
    int_list.print      ();
 
    system("pause");
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru