我正在尝试对链接列表进行排序。
代码无法正常运行,它会在检查如何在排序节点时最小化问题时跳过某些节点。
void sortNodes(){
node *parrser = head, *current = NULL;
node*temp;
while (parrser->next!= NULL){
current = head;
while (current->next!= NULL){
// cout << current->no << "next" << current->next->no;
if (current->no > current->next->no){
temp = current->next;
current->next = temp->next;
temp->next = current;
}
else
current = current->next;
}
parrser = parrser->next;
}
}
答案 0 :(得分:0)
代码将current-&gt; no与current-&gt; next-&gt; no进行比较。如果乱序,代码应该用current-&gt; next替换当前的电流,但是这需要更新当前代码当前没有的当前点。
在这种情况下,冒泡排序将具有相对最大数量的节点移动到每个内循环上的列表末尾。外部循环需要每次从列表的开头开始,以便具有最小编号的节点最终位于列表的前面。如果完成任何交换,则使用设置的交换标志,如果在通过后最终未设置,则排序完成。
而不是冒泡排序,创建一个新的空排序列表,然后从原始列表中删除节点并将它们按顺序插入到最初为空的排序列表中会更简单。