我创建了linkslist类,它运行正常。但是我遇到了复制构造函数的问题。它会在我打印时创建一个包含相同元素的副本。但是后来当我从原始列表中删除一个元素(通过调用下面给出的deleteHead()函数)时,创建的副本也会被更改,然后它包含一些垃圾值。我的理解是,我无法创建我想要的深层拷贝。 我如何复制列表,这样当我从原始列表中删除所有元素时,复制仍然包含所有元素? 这是具有相关功能的代码。
class Node{
public:
int data;
Node* next;
};
class LinkedList{
Node* head;
public:
LinkedList();
LinkedList(const LinkedList& otherLinkedList){
Node* iterator=otherLinkedList.head; //to iterate through the whole list and copy each node
head=NULL;
while(iterator->next!=NULL){
insertAtintail(iterator->data); //extarct the element of node and give it to the function which will create a node and add it to the new list
iterator=iterator->next;
}
insertAtintail(iterator->data);
}
void insertAtintail(int item){
if(head==NULL){
Node* temp=new Node;
temp->data=item;
temp->next=NULL;
head=temp;
}
else{
Node* tail=head;
while(tail->next!=NULL)
tail=tail->next;
Node* temp=new Node;
temp->data=item;
temp->next=NULL;
tail->next=temp;
}
}
void deleteHead(){
if(head!=NULL){
if(head->next!=NULL){
Node* toDelete=head;
head=head->next;
delete toDelete;
}
else{
delete head;
head=NULL;
}
}
}
};