Я работал с каждой функцией в этой программе, и я в основном понимаю концепции, но конструктор копирования для связанного списка поставил меня в тупик. Я смотрю на другие ответы относительно этого, но не понимаю, как применить это к моей ситуации.
У меня есть три файла, тест. cpp, который содержит main (), IntList. cpp и тест IntList.h.
. cpp и IntList.h были предоставлены моим профессором, поэтому можно с уверенностью предположить, что там нет ошибок. Я просто должен был написать IntList. cpp.
#include <iostream>
#include <cstdlib>
#include "IntList.h"
using namespace std;
IntList::IntList()
{
head = NULL;
}
IntList::IntList(const IntList &)
{
???
}
Вот IntList.h. Дайте мне знать, если вам нужен тест. cpp или другие функции в IntList. cpp.
// Specification file for the IntList class
#ifndef INTLIST_H
#define INTLIST_H
class IntList
{
private:
// Declare a structure for the list
struct ListNode
{
int value;
struct ListNode *next;
};
ListNode *head; // List head pointer
public:
// Constructor
IntList();
// Copy constructor
IntList(const IntList &);
// Destructor
~IntList();
// List operations
void appendNode(int val);
void removeByVal(int val);
void displayList();
void insertByPos(int val, int pos);
void removeByPos(int pos);
int search(int val);
};
#endif /* INTLIST_H_ */
РЕДАКТИРОВАТЬ:
Я читаю все комментарии, но это не для меня.
Я пытался переписать код, но он все еще не имел смысла. Вот моя попытка, я чувствую, что просто не понимаю, как это должно выглядеть.
IntList::IntList(const IntList &list) // maybe I name it list so I can refer to list.head?
{
ListNode *nodePtr;
nodePtr = list.head;
if (nodePtr == NULL) // If the head of list is empty then theres no list to copy
{
return;
}
while (nodePtr->next != 0) // Trying to iterate through the link
{
nodePtr = nodePtr->next;
}
ListNode *newNode;
nodePtr->next = newNode;
// ??? Confused again.
Вот моя функция для displayList ()
void IntList::displayList()
{
ListNode *nodePtr;
nodePtr = head;
while (nodePtr != NULL)
{
cout << nodePtr->value << endl;
nodePtr = nodePtr->next;
}
}
А вот мой appendNode ().
void IntList::appendNode(int val)
{
ListNode *newNode;
ListNode *nodePtr;
newNode = new ListNode;
newNode->value = val;
newNode->next = NULL;
if (!head)
{
head = newNode;
}
else
{
nodePtr = head;
while (nodePtr->next != 0)
{
nodePtr = nodePtr->next;
}
nodePtr->next = newNode;
}
}
Это имело для меня большой смысл, и я довольно быстро их закончил. Я не понимаю, как реализовать эти идеи в конструкторе копирования. Можете ли вы помочь мне выяснить, что я не получаю?