void List::ClearList()
{
Node *currentNode = m_pList->next;
while(currentNode != NULL)
{
Node *temp = currentNode->next;
delete currentNode;
currentNode = temp;
}
m_pList->next = NULL;
}
List::~List()
{
ClearList();
delete m_pList;
m_pList = NULL;
}
循环清空链表的数据 将当前的下一个指针赋值给临时指针 删掉当前指针 再将临时指针赋值给当前指针
链表的清空函数 ClearList() 的解释:
将头结点m_pList后的所有节点删除,并将头结点m_pList的对象指针next指针置为NULL。
void list::ClearList() { Node *currentNode = m_pList->next; while(currentNode != NULL) { Node *temp = currentNode->next; delete currentNode; currentNode = temp; } m_pList->next = NULL; }
m_pList并没有被删除,其数据仍然为零( m_pList->data = 0 ),只是将其的next指针置为NULL( m_pList->next = NULL )。
另外,此处 while(currentNode != NULL) 只是判断节点是否为空,并不是判断节点的对象指针。
原因是:
m_pList 是一个Node类型的对象指针,则其包含两个数据成员,一个是(i nt data ),另外一个是( Node *next )。
其数据成员*next同时也是一个Node类型的对象,可以指向下一个节点(通过 Node *currentNode = m_pList->next 来将其下一个节点赋值给 currentNode )。
m_pList 只作为头结点,其数据成员( m_pList->data )不放元素,没有任何意义;其对象指针成员( m_pList->next ) 只放链表第一个结点的地址。
m_pList 虽然是一个头结点,但不算在链表中,此时 m_iLength = 0。【由3-3 链表编码实战(一)3:55处可知】
List::ClearList()
List::~List()