C 正在删除linkedlist的背面
如果链表中只剩下一个节点,而您试图在我的程序中从后面删除它,则会出现错误。我想我知道为什么,但我解决不了。看,这是一个赋值,规则非常严格,我应该逐字实现一个标题,对于removeFromBack函数,我们应该删除back节点,然后返回一个指向删除节点的指针。但如果只剩下一个节点,我就不能取消对ptr->next的引用使其为空,这反过来又给我带来了问题。如何在不更改任何参数的情况下解决此问题?这是我的密码C 正在删除linkedlist的背面,c,linked-list,C,Linked List,如果链表中只剩下一个节点,而您试图在我的程序中从后面删除它,则会出现错误。我想我知道为什么,但我解决不了。看,这是一个赋值,规则非常严格,我应该逐字实现一个标题,对于removeFromBack函数,我们应该删除back节点,然后返回一个指向删除节点的指针。但如果只剩下一个节点,我就不能取消对ptr->next的引用使其为空,这反过来又给我带来了问题。如何在不更改任何参数的情况下解决此问题?这是我的密码 MusicRec * removeFromBack(MusicRec * theList)
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>才起作用。您还有一个testTheList==NULL
,它正在测试一个您没有向我们展示的全局变量;你能把它设为空吗?我为所有的打字错误感到抱歉,这是正确的。我的代码给出了很多错误,顺便说一下,函数的描述如下/*removeFromBack(MusicRec*theList)使用指向列表头部的指针。从列表标题中删除最后一项。不会释放已删除项目的内存。返回指向已删除项的指针。如果列表为空,则返回NULL*/我猜列表是一个锚节点。换句话说,它是一个静态分配的节点,没有内容,只用于其next
指针。因此,您永远不会将列表
设置为空,只会将其下一个指针设置为空。