复制构造函数链表C ++

时间:2014-11-22 08:15:16

标签: c++ linked-list copy copy-constructor

我创建了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;
          }
         }
      }

};

0 个答案:

没有答案