2017-02-14 60 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的任何點,而代碼目前沒有這樣做。

在這種情況下,氣泡排序會將具有相對最大數字的節點移動到每個內部循環上列表的末尾。外部循環需要每次都從列表的開始處開始,以便編號最小的節點最終位於列表的前部。如果任何交換完成,使用設置的交換標誌,並且如果通過後沒有設置交換標誌,則排序完成。

而不是氣泡排序,創建一個新的空的排序列表會更簡單,然後從原始列表中刪除節點並將它們按順序插入到最初的空排序列表中。

相關問題