您的位置:首页 > 编程语言 > C语言/C++

C语言实现链表之单向链表(六)删除头结点

2015-11-08 21:08 337 查看

C语言实现链表之单向链表(六)删除头结点

    上一篇文章给出了在头结点之前插入结点的函数,本篇文章将给出删除头结点的函数。

/*==============================================================================
*   操作  :删除头结点
*   操作前:ppHeadNode为链表的头指针的二级指针
*   操作后:(*ppHeadNode)指向新的头结点,原头结点被删除,所占内存被释放,
*           如果链表中只有头结点,则将(*ppHeadNode)置为NULL,操作成功返
*           回TRUE,操作失败返回FALSE
==============================================================================*/
C_Bool DeletFirstNode(MyListNode** ppHeadNode)
{
MyListNode* pListNodeTmp = NULL;

// 判断是否有链表输入
if((*ppHeadNode) == NULL)
{
fprintf(stderr, "There is no list.\n");
return FALSE;
}

if((*ppHeadNode)->pNextNodeAddr != NULL)
{
// 更新头结点
pListNodeTmp = (*ppHeadNode)->pNextNodeAddr;
free((*ppHeadNode));
(*ppHeadNode) = pListNodeTmp;
}
else
{
// 原来的链表中只有头结点,释放后剩下空表
free((*ppHeadNode));
(*ppHeadNode) = NULL;
}
return TRUE;
}


    强调几点:

(1)一定要传入二级指针,否则无法改变指针地址值;

(2)头结点删除后要记得更新头结点;

(3)这个函数采用了我们自己定义的布尔变量;

(4)该函数依旧进行了错误处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息