单向链表删除节点问题

本人写了一个书籍管理系统,用单向链表写的,但是在删除指定书籍(节点)时崩溃
,我试了很长时间,都没有解决,今天把代码放上,有懂得的大佬帮忙解决一下,不胜感激。

Book Delete(Book ptr,  string No)
{
    Book p = ptr;
    int x = Number(p);
    if (x == 0)
    {
        cout << "书架无书,删除失败" << endl;
    }
    if (x == 1)
    {
        Book temporary = ptr->next;
        ptr->next = NULL;
        delete temporary;
        temporary = NULL;
        cout << "删除书籍成功" << endl;
        return ptr;
    }
    if (x > 1)
    {
        do
        {
            Book ptrpro = ptr;
            ptr = ptr->next;
            if (ptr->No == No)
            {
                Book temporary = ptr;
                ptrpro->next = temporary->next;
                delete temporary;
                temporary = NULL;
                cout << "删除书籍成功" << endl;
                break;
            }
        } while (p != NULL);
        return p;
    }
}

Number函数为检测书架有多少本书的函数,书架的书大于1本时,老是崩溃

https://blog.csdn.net/peng_apple/article/details/79614518