返回节点指针的链接列表的深层副本

时间:2016-12-07 07:35:44

标签: c++ c++11 linked-list biginteger bigint

我在链表的深层副本上不断出现分段错误。我在我的Copy Contructor和我的赋值运算符(operator =)中使用了这个深层副本,并得出结论是这就是seg faulting。

bigint::Node* bigint::deepcopy(bigint::Node* target){
      bigint::Node* current = target;
      bigint::Node*cpy = new Node;
      cpy->digit = current->digit;
      Node* const hd = cpy;
      current = current->next;
      while(current != nullptr){
           bigint::Node* tmp = new Node;
           tmp->digit = current->digit;
           cpy->next = tmp;
           cpy = cpy->next;
           current = current->next;
       }
    return hd;
}

我的节点结构如下:

private:
struct Node{
      int digit;
      Node* next;
};
Node* head;
static Node* deepcopy(Node* target);

我的课程全部关闭,只显示与此功能相关的私密内容。提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

使用deepcopy函数时,必须确保参数target不是nullptr。因此,您应该在if (target == nullptr)功能的开头检查deepcopy

此外,在while循环结束后,您应该将新列表的尾部设置为nullptr。

根据您发布的信息,您似乎在空指针上使用->digit->next

如果您仍然遇到此错误,则最好提供示例代码。