首先,這是我目前試圖找出的一項任務的一部分。我試圖創建一個複製給定的LinkedList的複製構造函數。 我已經編碼了LinkedList方法。C++深層複製鏈接列表
以下是LinkedList.h文件的必要部分。
LinkedList.h
private:
struct node {
Val data;
node* next = nullptr;
};
typedef struct node* nodePtr;
nodePtr head = nullptr;
nodePtr current = nullptr;
nodePtr temp = nullptr;
};
的參數給出: 「鏈表:: LinkedList的(常量LinkedList的& LL)」 LL是要複製的鏈接列表。 我首先測試了鏈表中是否有頭部,如果不是則表示鏈接列表爲空。 然後我將頭從舊列表中複製到新列表中。 然後我將新電流設置爲頭部,以準備while循環。 在while循環中,我複製當前節點的數據以及指向下一個節點的指針。 最後,我將下一個指針設置爲nullptr來表示新列表的結束。
LinkedList.cpp
LinkedList::LinkedList(const LinkedList & ll){
if (ll.head == nullptr) {
return;
}
head = ll.head;
current = head;
while (ll.current->next != nullptr) {
current->data = ll.current->data;
current->next = ll.current->next;
}
current->next = nullptr;
}
我不確定這是否是深拷貝或不是。 我也知道ll.current的起始位置不在首位。 我試過ll.current = ll.head。但是,因爲這個函數是const的。我不能這樣設定。
還有給出另一種功能: { } 鏈表&鏈表::運算符=(const的鏈表& LL),我懷疑可能是必要的。我希望我可以選擇使用它。
首先寫複製構造函數和析構函數。一旦你實現這些功能,賦值運算符就很簡單。另外,如果'll.head'是'nullptr',你的拷貝構造函數會立即錯誤。原因是你沒有初始化任何成員 - 你只是'返回'。 – PaulMcKenzie
這不是深層複製。深度複製涉及在複製值之前爲成員分配內存。 – sameerkn
此外,您目前正在重寫'current-> data'和'current-> next'中的值,而不會更改'current'指向的位置。 –