链接列表堆栈复制构造函数C ++

时间:2016-10-02 21:43:01

标签: c++ linked-list stack

我正在使用这个结构:

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 个答案:

答案 0 :(得分:1)

对于原始节点中的每个节点,您需要在副本中分配新节点。您的问题没有包含足够的详细信息来说明确切的代码。您将大致执行以下操作:

  1. 分配一个类似

    的新对象
    node* n = new node();
    
  2. 您需要分配原始数据,例如

    n->data = temp->data;
    

    (除非你的node有一个构造函数将数据作为参数,在这种情况下你可以使用new node(temp->data)分配它。)

  3. 您需要将新节点n放到正确的位置。

  4. 如果你的堆栈类有一种方法可以将新元素推送到最后,你可以使用它:不是直接创建新的node,而是在循环中运行原始元素并添加新元素末尾的元素。

    定义复制构造函数时,记得还要定义复制赋值!最简单的方法是使用复制构造函数创建实际副本,然后将临时对象的内容与分配给的对象交换。