- 单向链表的清空:
- 所谓的清空,就是
清空除了头结点之外的所有结点的数据域和指针域
,区别于顺序表的清空
,代码如下:
int clean_link_list(node_t *phead){
if(NULL == phead){
printf("入参为NULL\n");
return -1;
}
node_t *ptemp = phead;
node_t *pdel = NULL;
while(ptemp->next != NULL){
pdel = ptemp->next;
ptemp->next = pdel->next;
free(pdel);
pdel = NULL;
}
return 0;
}
- 操作步骤:
- 1.入参合理性检查;
- 2.定义一个
新结点ptemp
,并将头结点的地址赋值给新结点的地址,即备份头结点
,防止头结点被删除
; - 3.定义
待删结点pdel
,赋初值为空指针
; - 4.利用
while循环
,借助头删法
,除头结点外,删除剩余结点
; - 单向链表的销毁:
包含单向链表的头结点在内
,销毁
单向链表的所有结点
,代码如下:
int destroy_link_list(node_t **phead){
if(NULL == phead || NULL == *phead){
printf("入参为NULL\n");
return -1;
}
clean_link_list(*phead);
free(*phead);
*phead = NULL;
return 0;
}
- 操作步骤:
- 1.入参合理性检查;
- 2.
清空单向链表
,是为了防止单向链表直接销毁后,导致内存空间泄漏
的情况产生; - 3.删除头结点,即
释放头结点所占用的内存空间
,并赋值NULL
;