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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
tiger()
3 / 3 / 0
Регистрация: 20.04.2011
Сообщений: 141
01.05.2011, 10:14     Копирование односвязного списка #1
в классе содержится односвязный список. соответственно пишу для него оператор присваивания.
подскажите, как можно скопировать односвязный список? я окончательно запутался в индексах и указателях... возможно, есть какой-то отработанный "красивый" алгоритм?

узел такой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct node
{
    double item;
    node* next;
 
    node(double x, node* y)
    {
        item=x;
        next=y;
    }
};
 
typedef node* link;
p.s. не прошу код, хотя бы общую суть
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2011, 10:14     Копирование односвязного списка
Посмотрите здесь:

C++ Заполнение односвязного списка
Сортировка односвязного списка C++
Построение односвязного списка C++
C++ Шаблон односвязного списка
C++ Сортировка односвязного списка
C++ Создание односвязного списка
C++ Вывод односвязного списка на C
Печать односвязного списка C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
01.05.2011, 10:31     Копирование односвязного списка #2
Общая суть такова, что тебе нужно пробежаться в цикле по исходному списку и для каждого элемента создать новую копию.
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
01.05.2011, 11:13     Копирование односвязного списка #3
Создаёт новый список идентичный данному, вернёт указатель на первый узел нового списка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
node* my_copy(node* first){
    assert(first != NULL);
    node i_ptr = first;
    node cp_ptr = new node(i_ptr->item,i_ptr->next)
    
    node new_first = cp_ptr;
    
    while( i_ptr->next != NULL ){
    
        node cp_ptr->next = new node(i_ptr->next->item,i_ptr->next->next);
        
        i_ptr = i_ptr->next;
        cp_ptr = cp_ptr->next;
        
    }
    
    return new_first;
}
Считаем, что поле next последнего узла содержит NULL.
Yandex
Объявления
01.05.2011, 11:13     Копирование односвязного списка
Ответ Создать тему
Опции темы

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