我在链接列表中排序节点时遇到了一些问题。我能够成功地实现列表本身,但是当我尝试对它进行排序时,我失败了。我相信这是一个与我尝试比较聚合类型的引用指针有关的问题。我对指针或者一般的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;
}
答案 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。因为它只比较两个节点并交换它们。如果要对整个列表进行排序,只要当前元素小于前一个元素,就需要另一个循环向后循环到根目录。您可能需要另一个函数而不是向后循环,将前一个节点推送到当前节点,直到前一个节点小于临时节点。您可能还会发现索引和迭代器在此排序中很有用。