2013-07-16 49 views
0

我在排序鏈接列表中的節點時遇到了一些問題。我能夠成功地實現列表本身,但是當我嘗試對其進行排序時,我失敗了。我認爲這是一個與我比較聚集類型的引用指針的嘗試有關的問題。我對指針或一般的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; 
} 

回答

2

你的第二個循環遍歷一個太多次(它運行y時間和訪問curr->x之前執行curr = curr->next每次)。另外,您不必每次都一直運行第二個循環,第一次運行後最後一個節點將包含最大值,兩次運行後最後兩個節點將具有最大值,等等。

否則它看起來像一個很好的泡沫給我。如果你是這樣的事情...

0

你是否想要按順序對列表進行排序,因此類似於1,2,3,4,5 ... n。如果是這樣,我想指出你的代碼只會將當前元素與下一個元素進行排序。而不是排序整個列表。所以如果你有一個列表:9,5,8,7,6,5,4,2。你想按升序排序。最終得到一個列表:5,8,7,6,5,4,2,9。因爲它只比較兩個節點並交換它們。如果要對整個列表進行排序,只要當前元素小於上一個元素,就需要另一個循環向後循環。您可能需要另一個功能而不是向後循環,將前一個節點推送到當前節點,直到前一個節點小於臨時節點。你也可以在這個排序中找到那個索引和一個迭代器。