链表——C语言中的Linkedlist



我正在尝试创建一个链表在C与指针结构的时刻。我的逻辑有点问题。所以我想知道,当删除列表的头部时,我是否会返回被删除的项,或者,我是否会返回新的列表头部。此外,如果我将返回新的头,我将如何释放内存?(这部分是赋值)根据赋值信息,我们不应该释放函数中被删除的项。我的问题是,我要在哪里释放内存?下面是这段代码。我的代码在这里只是返回新的头部,或返回NULL,如果列表是空的。

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

很简单。每个分配函数都有一个配套的分配函数,有时还有一套额外的实用函数。在文档中查找分配器。

在返回之前释放。这可能意味着您需要一个临时副本。

BTW:您正在返回正确的值…

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

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

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

相关内容

  • 没有找到相关文章

最新更新