我在链表中对节点进行排序时遇到一些问题。我能够成功地实现列表本身,但当我尝试对其进行排序时,我失败了。我认为这是一个与我尝试比较聚合类型的延迟指针有关的问题。我对指针或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;
}
您的第二个循环迭代次数太多(它运行y
次,每次在访问curr->x
之前执行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。因为它只比较两个节点并交换它们。如果要对整个列表进行排序,则需要另一个循环,只要当前元素小于前一个元素,该循环就会向后循环到根。您可能需要另一个函数,而不是向后循环,将上一个节点推到当前节点,直到上一个结点小于临时结点。您可能还发现索引和迭代器在这种排序中很有用。