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