存储链接列表节点地址

时间:2013-10-14 19:32:46

标签: c++ doubly-linked-list

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

由于 在这种情况下,我们的数据是相关性

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;
}

这不是一种奇特的类型,只是试图对我的数据进行简单的降序排序。一旦找到最大的,我想将其nodes标志设置为true。只需要一种存储地址的方法。

2 个答案:

答案 0 :(得分:0)

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

此外,我建议不要使用largest指向的内容初始化findbiggest - 没有看到您的其他列表代码,但我猜如果指针可能是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;

答案 1 :(得分:0)

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

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