一、单链表尾删法
思路:
- 用指针ptail遍历链表,pre记录ptail前驱,遍历的条件是
ptai->pnext!=NULL
- 遍历结束,ptai指向链表尾结点,pre指向尾结点前驱
- 释放尾结点,将pre结点的指针域置空
代码
/// @brief 删除链表尾结点,即尾删法
/// @param plist 链表指针
/// @return 返回是否删除成功标志
/// @retval ERROR(0):链表不存在或链表为空,不可操作
/// @retval OK(1):删除成功
status xxx_pop_back(myLinkList* plist)
{
if (plist == NULL)
{
return ERROR;
}
return xxx_pop_back_(plist->phead);
}
status xxx_pop_back_(myLNode* phead)
{
if (phead == NULL || phead->pnext == NULL)
{
return ERROR;
}
myLNode* ptail = phead;
myLNode* pre = NULL;
/// 循环让ptail最终指向尾结点,pre指向尾结点前驱
while (ptail->pnext != NULL)
{
pre = ptail;
ptail = ptail->pnext;
}
pre->pnext = NULL;
free(ptail);
ptail = NULL;
return OK;
}