2017-02-14 101 views
-1

我想排序链接列表。尝试对链表进行排序时跳过的节点

代码无法正常工作,它会跳过一些节点来检查如何在排序节点时尽量减少问题。

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

0123请用适当的语言标签标记问题并解释,确切的错误:在什么情况下跳过节点,如何检查等。 –

+0

链接列表最好使用[合并排序](https: //en.wikipedia.org/wiki/Merge_sort) – sp2danny

回答

0

该代码将current-> no与current-> next-> no进行比较。如果出现乱码,代码应该使用current-> next来交换current,但是这需要更新指向current的任何点,而代码目前没有这样做。

在这种情况下,气泡排序会将具有相对最大数字的节点移动到每个内部循环上列表的末尾。外部循环需要每次都从列表的开始处开始,以便编号最小的节点最终位于列表的前部。如果任何交换完成,使用设置的交换标志,并且如果通过后没有设置交换标志,则排序完成。

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

相关问题