链表堆栈复制构造函数



我使用这个结构体:

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

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

    这样的内容
    n->data = temp->data;
    

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

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

如果你的堆栈类有一种将新元素压入到末尾的方法,你可以使用它:而不是直接创建新的node,你可以在循环中遍历原始列表并将元素添加到新列表的末尾。

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

相关内容

  • 没有找到相关文章

最新更新