C++教程:清除链表

2020-01-06 12:16:08刘景俊
链表的结点也是动态分配的,如果在程序结束之前不释放内存,就会造成内存泄漏。因此,编写一个清除链表的函数就显得相当有必要。我们先来分析一下清除这个功能:
  1. 我们必须知道对哪个链表进行操作,所以表头指针head是必须知道的,并且清除整个链表后要将其改为NULL。
  2. 类似于删除结点,我们还需要一个指针p来指向待删除结点。
  3. 类似于删除表头结点的操作,我们仍然要先连后断:先把表头指向头结点的后继,再删除头结点。

下面我们来写一下这个函数:(程序9.6.5)
void destroy(node * &head)
{
   node *p;
   while (head!=NULL)//当还有头结点存在时
   {
      p=head;//头结点是待删除结点
      head=head->next;//先连
      delete p;//后断
   }
   cout <<"The link list has been deleted!" <<endl;
}