c++ - 链表堆栈复制构造函数 C++

标签 c++ linked-list stack

我正在使用这个结构:

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

node *head;
node *headCopy;

基于堆栈的实现创建单个链表。我所有的核心堆栈方法都在工作。我只是在实现带参数的复制构造函数时遇到了问题:

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. 分配一个看起来像这样的新对象

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

    n->data = temp->data;
    

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

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

如果您的堆栈类有办法将新元素推到末尾,您可以使用它:不是直接创建新的 node,而是在循环并将元素添加到新列表的末尾。

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

关于c++ - 链表堆栈复制构造函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39821999/

相关文章:

c - 了解C语言中这种形式的for循环

java - 什么是用于在 Java 中使用堆栈进行长减法的(递归或非递归)算法的示例?

c++ - 多线程curl应用存在内存分配问题

c++ - C++ 程序中使用的 SQL 数据类型是什么?

c++ - 实现抽象工厂模式的最佳方法

c - 输入空格

c++ - 调整图片大小 vc++

c - c中从链表中删除条目的函数

c - 使用堆栈迭代快速排序

javascript - 在 Javascript 中实现我的堆栈类时遇到问题