C 正在删除linkedlist的背面

C 正在删除linkedlist的背面,c,linked-list,C,Linked List,如果链表中只剩下一个节点,而您试图在我的程序中从后面删除它,则会出现错误。我想我知道为什么,但我解决不了。看,这是一个赋值,规则非常严格,我应该逐字实现一个标题,对于removeFromBack函数,我们应该删除back节点,然后返回一个指向删除节点的指针。但如果只剩下一个节点,我就不能取消对ptr->next的引用使其为空,这反过来又给我带来了问题。如何在不更改任何参数的情况下解决此问题?这是我的密码 MusicRec * removeFromBack(MusicRec * theList)

如果链表中只剩下一个节点,而您试图在我的程序中从后面删除它,则会出现错误。我想我知道为什么,但我解决不了。看,这是一个赋值,规则非常严格,我应该逐字实现一个标题,对于removeFromBack函数,我们应该删除back节点,然后返回一个指向删除节点的指针。但如果只剩下一个节点,我就不能取消对ptr->next的引用使其为空,这反过来又给我带来了问题。如何在不更改任何参数的情况下解决此问题?这是我的密码

MusicRec * removeFromBack(MusicRec * theList)
{
    MusicRec *record;
    if(theList == NULL)
    {
        return NULL;
    }
    else if(theList->next == NULL)
    {
        record = theList;
        theList = NULL;
        return record;
    }

    while(theList->next->next != NULL)
    {
        theList = theList->next;
    }

    record = theList->next;
    theList->next = NULL;

    return record;
}

removeFromBack()
的签名是固定的还是可固定的?你面临着几个选择。如果接口是固定的,您可能无法删除最后一个节点,因为它也是第一个节点。如果界面是可修复的,您可以将原型更改为
Music*removeFromBack(MusicRec**pTheList)
,并在代码中使用
*pTheList
代替
列表。您的作业
theList=NULL
更改局部变量
列表
,但不更改调用函数中的指针。它不是如我所说的原型,我的教授有一个自动分级机,它必须与在标题中写入的方式完全相同。函数的引用类型正确吗?您返回的是
音乐*
(上面写着),但您也返回了
返回记录
音乐录制Music
MusicRec
是同一类型的两个名称时,code>才起作用。您还有一个test
TheList==NULL
,它正在测试一个您没有向我们展示的全局变量;你能把它设为空吗?我为所有的打字错误感到抱歉,这是正确的。我的代码给出了很多错误,顺便说一下,函数的描述如下/*removeFromBack(MusicRec*theList)使用指向列表头部的指针。从列表标题中删除最后一项。不会释放已删除项目的内存。返回指向已删除项的指针。如果列表为空,则返回NULL*/我猜列表是一个锚节点。换句话说,它是一个静态分配的节点,没有内容,只用于其
next
指针。因此,您永远不会将列表
设置为空,只会将其下一个指针设置为空。