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

C++ 通过指针比较聚合类型的成员值,c++,pointers,linked-list,C++,Pointers,Linked List,我在对链接列表中的节点进行排序时遇到一些问题。我能够成功地实现列表本身,但是当我尝试对它进行排序时,我失败了。我相信这是一个与我尝试比较聚合类型的延迟指针有关的问题。我对指针和C++编程经验不多。如果有人能帮我指出正确的方向,我将不胜感激 void sortNodes() { int y, tmp; y = nodeCount(); Node *curr, *prev; for (int i = 0; i < y; i++) { c

我在对链接列表中的节点进行排序时遇到一些问题。我能够成功地实现列表本身,但是当我尝试对它进行排序时,我失败了。我相信这是一个与我尝试比较聚合类型的延迟指针有关的问题。我对指针和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;
}
void sortNodes()
{
INTY,tmp;
y=节点计数();
节点*curr,*prev;
for(int i=0;i下一步;
如果(上一次->当前->当前->x)
{
tmp=prev->x;
上一个->x=当前->x;
当前->x=tmp;
}
}
}
curr=0;
prev=0;
}

您的第二个循环重复了太多次(每次访问
curr->x
之前,它运行
y
次,并执行
curr=curr->next
)。此外,您不必每次都运行第二个循环直到结束,第一次运行后,最后一个节点将包含最大值,两次运行后,最后两个节点将具有最大值,以此类推


否则对我来说它看起来像一个很好的泡泡运动。如果你对这类事情感兴趣…

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