C中的链接列表

时间:2014-03-28 22:38:41

标签: c linked-list

我正在尝试使用指向结构的指针在C中创建一个链表。我的逻辑存在一些问题。所以我想知道,当删除列表的头部时,我会返回删除的项目,或者,我是否会返回列表的新头部。另外,如果我要回新头,我怎么能释放记忆? (这部分用于作业)根据作业信息,我们不应该在功能中释放被删除的项目。所以,我的问题是,我将在哪里释放记忆?这是代码片段。我的代码只返回新头,如果列表为空则返回NULL。

MusicRec * removeFromFront(MusicRec * theList)
{
    if(theList == NULL)
    {
        return NULL;
    } 
    return theList->next;
}

3 个答案:

答案 0 :(得分:1)

简单。每个分配函数都有一个伴随释放函数,有时还有一整套额外的实用函数。查看分配器的文档。

在您返回之前解除分配。这可能意味着你需要一份临时副本。

BTW:你正在返回正确的值...

答案 1 :(得分:1)

MusicRec *removeFromFront(MusicRec  **theListref)
{
    if(*theListref == NULL)
        return NULL;    // shouldn't there be an underflow error?
    Musicref *oldhead = *theListref;
    *theListref = *theListref->next;
    return oldhead;
}

我将指针归还给老头。这可以在调用函数中释放。该参数是当前头指针的引用

修改 如果我必须坚持你的界面,你的代码是完全正确的&我将在调用函数中清理内存:

theListCopy = theList;
theList = removeFromFront(theList);
//free the ListCopy here

答案 2 :(得分:1)

该函数应保存指向要删除的节点(当前头节点)的指针,将列表的头部重置为下一个节点(即当前的第二个节点),然后将保存的指针返回到已删除的节点。 / p>

使用链表api的用户可能会将一些复杂的结构用作节点,在这种情况下,最好由调用者来处理数据的内存清理。