2016-10-02 2 views
0

Я использую эту структуру:Связанный список Стек Конструктор копирования C++

struct node 
{ 
    T data; 
    node *next; 
}; 

node *head; 
node *headCopy; 

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

LinkedStack<T>::LinkedStack(const LinkedStack<T>& aStack) 

То, что я в настоящее время это (который не работает):

node *temp; 
temp = head; 
while (temp != NULL) 
{ 
    headCopy = head; 
    temp = temp->next; 
} 

Я полагаю, что: моя самая большая проблема в том, У меня возникли проблемы с визуализацией, как эта копия произойдет. Я посмотрел на другие примеры, но я не могу следовать. У меня не возникло проблем с созданием конструктора копий для стека на основе массива. Я предположил, что это будет похоже на мою функцию show(), кроме как вместо вывода. Я переназначаю другой связанный список. Мой show() метод заключается в следующем:

node *temp; 
temp = head; 
while (temp != NULL) 
{ 
    std::cout << temp->data << std::endl; 
    temp = temp->next; 
} 

Любая помощь будет оценили, спасибо!

+1

Подсказка: 'while (temp! = NULL) {addToEndOfList (temp-> data); temp = temp-> next;} ' – immibis

+0

Возможный дубликат [Что такое правило из трех] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) –

ответ

1

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

  1. Выделяют новый объект, который будет выглядеть примерно так

    node* n = new node(); 
    
  2. Вам необходимо присвоить данные от оригинала, то есть, что-то вроде

    n->data = temp->data; 
    

    (если ваш node не имеет конструктор, принимающий данные в качестве аргумента в этом случае вы можете выделить его с помощью new node(temp->data)).

  3. Вам нужно, чтобы новый узел n был в нужном месте.

Если ваш класс стек имеет способ подтолкнуть новый элемент на конце, вы можете быть в состоянии использовать это: вместо создания нового node s непосредственно вы бы работать над оригиналом в петлю и добавить элемент в конец нового списка.

При определении конструктора копирования не забудьте также указать назначение копии! Самый простой способ - использовать конструктор копирования для создания фактической копии, а затем поменять содержимое временного объекта с назначенным объектом.