博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DS-单链表:单链表尾删法

Posted on 2023-02-16 01:17  乔55  阅读(42)  评论(0编辑  收藏  举报

一、单链表尾删法

思路:

  • 用指针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;
}