通过指针比较聚合类型的成员值

时间:2013-07-16 00:10:46

标签: c++ pointers linked-list

我在链接列表中排序节点时遇到了一些问题。我能够成功地实现列表本身,但是当我尝试对它进行排序时,我失败了。我相信这是一个与我尝试比较聚合类型的引用指针有关的问题。我对指针或者一般的c ++编程都不是很有经验。如果有人能帮助我指出正确的方向,我将非常感激。

void sortNodes()
{
    int y, tmp;
    y = nodeCount();
    Node *curr, *prev;

    for (int i = 0; i < y; i++)
    {
        curr = root;
        for (int j = 0; j < y; j++)
        {
            prev = curr;
            curr = curr->next;
            if (prev->x > curr->x)
            {
                tmp = prev->x;
                prev->x = curr->x;
                curr->x = tmp;
            }
        }
    }
    curr = 0;
    prev = 0;
}

2 个答案:

答案 0 :(得分:2)

你的第二个循环迭代一次太多次(每次运行y次并在访问curr = curr->next之前每次都执行curr->x)。此外,您不必每次都运行第二个循环到最后,第一次运行后最后一个节点将包含最大值,两次运行后最后两个节点将具有最大值,等等。 / p>

否则它对我来说看起来像是一个很好的气泡。如果你有这样的事情......

答案 1 :(得分:0)

您是否尝试按顺序对列表进行排序,例如1,2,3,4,5 ... n。如果是这样,我想指出您的代码只会使用下一个元素对当前元素进行排序。而不是整理整个列表。因此,如果您有一个列表:9,5,8,7,6,5,4,2。并且您希望按升序排序。您最终获得了一个列表:5,8,7,6,5,4,2,9。因为它只比较两个节点并交换它们。如果要对整个列表进行排序,只要当前元素小于前一个元素,就需要另一个循环向后循环到根目录。您可能需要另一个函数而不是向后循环,将前一个节点推送到当前节点,直到前一个节点小于临时节点。您可能还会发现索引和迭代器在此排序中很有用。