我正在尝试实现链表,并使用某些方法来补充链表。 然而,一旦我复制链表,删除第一个链表的头部,并实现我的重载运算符“<<”来输出链表,我得到一个错误
Unhandled exception at 0x0128506C in program.exe: 0xC0000005: Access violation reading location 0xFEEEFEF2.
如何在不依赖第一个链表的情况下复制链表。
NodeSLList list2 (list1); //copy constructor
temp = list1.DeleteFromHead();
cout << "node retrieved " << temp.data << endl;
cout << "cout << list1 " << endl;
cout << list1 << endl;
cout << list2 << endl; //error occurs
拷贝构造函数
NodeSLList::NodeSLList(NodeSLList & list)
{
head = list.head;
tail = list.tail;
cout << "copy constructor called" << endl;
}
最佳答案
您的复制构造函数不进行复制。它只会使新列表指向原始列表的第一个和最后一个节点。
基本上,您需要循环遍历原始列表的每个节点,并为每个节点调用复制构造函数,将相邻拷贝链接在一起。
Node* n=list.head;
Node* prv=0;
while (n)
{
Node* cpy = new Node(*n);
if (prv)
prv->next=cpy;
else
head=cpy;
n=n->next;
prv=cpy;
}
tail=prv;
关于c++ - 链表复制构造函数的正确实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26940714/