销毁带头单链表,为什么要传入二级指针进行销毁

使用两种简单的代码列子进行解说。
有这样一个结构体:

typedef struct Node
{
	int data;			//数据域
	struct Node* next;	//指向下一个节点的指针域
}NODE, *LPNODE;

头节点的创建

LPNODE headNode = (LPNODE)malloc(sizeof(NODE));
assert(headNode);	//断言
headNode->next = NULL:

传入一级指针

函数实现

//销毁函数——传入一级指针
void deleteList(LPNODE head)
{
	free(head);
	head = NULL;
}

调用函数

deleteList(headNode);
if(headNode == NULL)
{
	printf("单链表头节点删除成功\n");
}
else
{
	printf("单链表头节点删除失败\n");
}
  1. 打印结果:单链表头节点删除失败
  2. 原因:
    • 函数deleteList(LPNODE head) 中的 head 是临时的,当调用完该函数,head 的内存就会被回收。
    • 虽然 head 保存了头节点 headNode 中保存的地址,但是head 时一级指针,head = NULL; 不代表 headNode = NULL;

传入二级级指针

函数实现

//销毁函数——传入一级指针
void deleteList(LPNODE* head)
{
	free(*head);
	*head = NULL;
}

调用函数

deleteList(&headNode);
if(headNode == NULL)
{
	printf("单链表头节点删除成功\n");
}
else
{
	printf("单链表头节点删除失败\n");
}
  1. 打印结果:单链表头节点删除成功
  2. 原因:
    • 函数deleteList(LPNODE* head) 中的 head 是二级指针
    • *head 就代表了 headNode ,因此,*head = NULL; 就代表 headNode = NULL;
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值