关于慕课网上数据结构链表篇的理解
在该课程中,当定义Node类时,在该类内部定义了一个Node类型的指针,
那么它有什么作用呢?
class Node
{
public:
int data;
Node *next;
}
如果你不用Node的指针,那么意味着当你通过Node类来指向链表的下一个节点,你会发现数据类型错误,除非你实例化一个Node类型的指针,但是这样你会发现你写的代码会很长
bool List::ListInsertHead(Node *pNode)
{
Node *temp;
temp->next = m_pList->next;
Node *newNode = new Node;
if(newNode == NULL)
return false;
newNode->data=pNode->data;
m_pList->next=newNode->next;
newNode->next=temp->next;
}
这样的话,明明只是需要一个指针来表明下一个节点的地址,却必须要实例化一个对象,浪费了内存。
其次,又一引了新的问题,是否可以在定义一个类型中实例化一个该类的对象呢?
假设你这样做的话,你会发现你的程序会崩溃。
因为在你这样定义该类之后,你在类外实例化一个对象时,该对象会自动获得该类的所有成分,但是类中又存在一个对象,该对象仍会继续执行下去,从而造成一个死循环。
但是为什么实例化一个对象指针却不会造成这个问题呢
?
class Node
{
Node node; //错误;
Node *node;//正确;
}
因为对于一个指针来说,它只需要一个地址就行,至于他的数据类型是怎样的,并不需要它在定义的时候就必须给出,
而这也就是为什么定义该类型的指针却不会报错的缘由。