2013-01-22 33 views
1

如何對單鏈表中的元素進行排序(通過某些值,如list-> id)?我想出的想法是找到最大的價值並保存其索引。然後遍歷列表,以便*頭指針指向該元素...然後將該元素與第一個元素交換。最後一句......我該怎麼做?對單鏈表中的元素進行排序C

+0

您可以像列表或任何其他數據結構一樣對它進行排序:各種O(n)複雜性都有各種排序。如何交換鏈接列表的特定實現中的元素 - 取決於您如何實現鏈接列表。如果你的字段是一個整數,你當然可以使用着名的C「swap」函數。 – PinkElephantsOnParade

回答

3

交換數據通常比較容易,而不是「重新鏈接」列表,以便更改實際列表節點的順序。

如果你的領域是一個整數,你可以這樣做:

static void swap_ids(ListNode *a, ListNode *b) 
{ 
    const int a_id = a->id; 

    a->id = b->id; 
    b->id = a_id; 
} 
+0

謝謝,好點! – khernik

+0

偉大的想法:)如果列表中包含更復雜的元素,那麼交換可能需要比重新鏈接更多的操作。在這種情況下,+1。 –

0

我要說如何排序列表中的最好的辦法是實行merge sort

你仍然試圖做的是被稱爲選擇排序,是可行的(實際上它不是很難)。您需要將指針保留爲列表中的最小的元素,然後移動鏈接以使其位於head元素之前(請記住也要移動head)。我說你需要選擇最小的元素,因爲通常你只保留一個指向頭的鏈接在一個鏈表中。