存储链接列表节点地址



我目前正在为双链接列表编写降序排序函数。我有一个最大值的标志,但想知道是否有办法存储节点指针的地址,以便我可以在操作完成后在循环外设置其标志。

谢谢在这种情况下,我们的数据是相关的

float findLargest(DoublyLinkList largestdata)
{
    ListPlayHolder *findbiggest = largestdata.lhead;
    float largest = findbiggest ->relevance;
    while (findbiggest ->next != NULL)
    {
        if (findbiggest ->relevance > largest && findbiggest ->largestFlag != true)
        {
            largest = findbiggest ->relevance;
        }
        findbiggest = findbiggest->next;
    }
    return largest;
}

这不是花哨的排序,只是试图对我的数据进行简单的降序排序。找到最大的节点后,我想将其节点标志设置为 true。只需要一种方法来存储地址。

如果您使用std::list则可以使用具有不同比较函数的std::sort,而不必为每个不同的排序序列更改节点结构。

另一个想法是将项目放入std::vector中,并为每个项目创建std::list<item *>。 这将允许您以各种顺序访问向量中的项目。 例如,一个列表可以用于按标题升序。 另一个可能是相关性下降。

据我了解,您只需要保留指向最大元素的指针,所以没有什么花哨的,只是另一个ListPlayHolder*(这似乎是指向节点的指针的数据类型 - 如果你问我,这是一个非常令人困惑的名字,但无论如何)。

另外,我建议不要用findbiggest指向的东西来启动largest - 没有看到你的其他列表代码,但我想如果列表为空,指针可能会NULL

如果您改为保留当前最大对象的指针,则实际上不需要单独存储相关性值(谢谢@WhozCraig)。下面是修改后的代码:

ListPlayHolder* findbiggest = largestdata.lhead;
ListPlayHolder* largest = findbiggest;
while (findbiggest && findbiggest ->next != NULL)
{
    if (findbiggest ->relevance > largest->relevance && findbiggest->largestFlag != true)
    {
        largest = findbiggest;
    }
    findbiggest = findbiggest->next;
}
// here do whatever modifications you need to do to flags? or maybe return largestPtr?
largest->largestFlag = true;
return largest->relevance;

最新更新