首先,我意识到 StackOverflow 上有多个关于此的主题。我在理解其中一些人的反应时遇到了一点麻烦。我正在创建这个,希望有人可以帮助我理解这个过程。
如果这个问题看起来相对新手,我深表歉意,但我正在尽力理解它。
我正在学习数据结构,并被要求根据提供的标头创建 LinkedList 实现文件。
这是作业,所以请不要“这里是确切的代码”类型的答案。欢迎使用伪代码、步骤和提示。
这是我目前正在处理的标题部分:
typedef std::string ElementType;
class LinkedList
{
private:
class Node
{
public:
ElementType data;
Node * next;
Node( )
: data( ElementType( ) ), next( NULL )
{ }
Node( ElementType initData )
: data( initData ), next( NULL )
{ }
}; // end of Node class
typedef Node * NodePointer;
public:
LinkedList( );
/* Construct a List object
Precondition: none.
Postcondition: An empty List object has been constructed.
*/
LinkedList( const LinkedList &source );
/* Construct a copy of a List object.
Precondition: None.
Postcondition: A copy of source has been constructed.
*/
~LinkedList( );
/* Destroys a List object.
Precondition: None.
Postcondition: Any memory allocated to the List object has been freed.
*/
const LinkedList & operator=( const LinkedList &rightSide );
/* Assign a copy of a List object to the current object.
private:
NodePointer first;
int mySize;
};
到目前为止,我已经创建了析构函数,你能检查并确保它是正确的吗?
//Destructor
LinkedList::~LinkedList()
{
NodePointer ptr = first;
while(ptr != 0 ) {
NodePointer next = ptr->next;
delete ptr;
ptr = next;
}
first = 0;
}
现在这是我迷路的部分......创建复制构造函数的基本步骤是什么?我已经完成了简单的默认构造函数,但是我对应该在复制构造函数上做什么感到有点困惑。
我也对重载 = 运算符感到有些困惑,我认为它与复制构造函数非常相似。
编辑
我第一次尝试复制构造函数:
LinkedList::LinkedList(const LinkedList & source)
{
//create a ptr to our copy
Node * copy_node = source.first;
//where we will be inserting our copy
Node * insert_node = first;
while(copy_node != nullptr)
{
//insert our new copy node
insert_node = new Node(copy_node->data);
//move to our next node
copy_node = copy_node->next;
if(copy_node != nullptr) {
insert_node = insert_node->next;
} else {
insert_node = first;
}
//update size
mySize++;
}
}
我觉得那里少了点什么。