尝试对链表进行排序时跳过节点

Skipped nodes when trying to sort linked list

本文关键字:节点 排序 链表      更新时间:2023-10-16

我正在尝试对链表进行排序。

代码无法正常工作,它会跳过一些节点,检查如何在对节点进行排序时最大程度地减少问题。

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;
    }
}

代码将当前>否与当前>下一个>否进行比较。如果顺序不正确,代码应将当前与当前>next交换,但这需要将任何指向当前的内容更新,而代码当前没有这样做。

在这种情况下,冒泡排序将具有相对最大数字的节点移动到每个内部循环的列表末尾。外部循环每次都需要从列表的开头开始,以便数字最小的节点最终位于列表的前面。使用在完成任何交换时设置的交换标志,如果在传递后最终未设置,则排序完成。

冒泡排序相比,创建一个新的空排序列表,然后从原始列表中删除节点并按顺序将它们插入到初始空排序列表中会更简单。