Bu işlev, bağlantılı bir listenin kopya yapısıdır. Bu kod, ilk önce bir yerde durur, sadece yeni bağlantı listesi oluşturuyor, neyin neden olduğuna emin değilsiniz ve herhangi bir yardım takdir ediliyor. Başka bir şeye ihtiyacınız olursa lütfen bana bildirin. Teşekkürler. Eğer kopya kurucu doğru headPtr
atmadı gibiBağlantılı bir listenin kopya yapıcı işlevim için neden bölümleme hatası alıyorum?
DLL::DLL(DLL& n) {
if (n.headPtr == NULL) {
headPtr = NULL;
}
else {
//keeps track of the last node in the list
Node* lastNode = NULL;
//keeps track of old list
Node* oldListNode = n.headPtr;
while (oldListNode != NULL) {
//create a new Node for new list until reaches end of old list
Node* newNode = new Node;
newNode->pred = NULL;
newNode->succ = NULL;
newNode->ssn = oldListNode->ssn;
newNode->name = oldListNode->name;
//add newNode to new List
if (headPtr == NULL) { //new list is empty
headPtr = newNode;
lastNode = headPtr;
}
else {
//adds new node to the end of the list
lastNode->succ = newNode;
newNode->pred = lastNode;
lastNode = newNode;
}
//Goes to the next node in the old list;
oldListNode = oldListNode->succ;
}
}
//now puts all information from old list into new list
itemCount = n.itemCount;
if (n.headPtr == NULL) {
headPtr = NULL;
}
else {
if (n.itemCount > 0) {
cout << "in while loop, ";
Node *origList = n.headPtr; //pointer accessing old node's data
Node *secondHeadPtr = new Node; //second hptr for new ll
Node *currNode = secondHeadPtr; // points to second ll node that will be filled
Node *nextNode; //going to point to added node
while (currNode != NULL) {
cout << "in while loop, ";
nextNode = new Node; //next node, currnode to point to
currNode->ssn = origList->ssn;
currNode->name = origList->name;
currNode->succ = nextNode; //create beginning of second ll, next node
nextNode->pred = currNode;
currNode = currNode->succ;
origList = origList->succ;
cout << currNode->name << " " << currNode->ssn << " ";
}
}
}
}
Başlık dosyası
#include <string>
using namespace std;
struct Node {
string ssn;
string name;
Node* succ;
Node* pred;
};
class DLL {
private:
Node* headPtr;
int itemCount;
public:
DLL();
DLL(DLL& n);
virtual ~DLL();
Node* getHeadPtr();
int search(string ss) const;
bool insert(string ss, string name, int & count);
bool remove(string ss, int & count);
int size();
void display();
};
Testi Dosya
#include "DLL.h"
#include <iostream>
#include <string>
using namespace std;
int main() {
DLL myList;
int counter = 0;
int dCounter = 0;
myList.insert("30", "Jack Eblin", counter);
myList.insert("40", "Liz Smith", counter);
myList.insert("10", "Mike Dutter", counter);
myList.insert("20", "Kitty Lekberg", counter);
myList.insert("50", "Carma Meshew", counter);
cout << "After insertion, we should have 10 20 30 40 50 in order" << endl;
myList.display();
cout << "Searching 30 in the list, result should be 2" << endl;
cout << myList.search("30") << endl;
myList.remove("10", dCounter);
myList.remove("50", dCounter);
cout << "After deletion, we should have 20 30 40 in order" << endl;
myList.display();
cout << "Testing copy constructor" << endl;
DLL* temp = new DLL(myList);
cout << "Contents of the original list" << endl;
myList.display();
cout << "Contents of the new list, the memory address of the this list must be different from the\
original list" << endl;
if (myList.getHeadPtr() != nullptr) {
temp->display();
}
return 0;
}
Kopya yapıcınız gerçekten bir 'const DLL &' argümanı almalıdır. –
Hata ayıklamayı deneyin. "Bir yerlerde" çok yardımcı olmuyor. –
Tutarsız girinti ve kötü kod kalitesi yoldaştır. Kodunuzla daha çalışkan olmayı öğrenmelisiniz ve biçimlendirme otomatik olarak gelişecektir. – IInspectable