如何在单链表中对元素进行排序(通过某些值如list-> id)?我想出的想法是找到最大值并保存其索引。然后遍历列表,以便* head指针指向该元素......然后将此元素与第一个元素交换。最后一句......我怎么能这样做?
答案 0 :(得分:3)
通常更容易交换数据,而不是“重新链接”列表,以便更改实际列表节点的顺序。
如果您的字段是整数,则可以执行以下操作:
static void swap_ids(ListNode *a, ListNode *b)
{
const int a_id = a->id;
a->id = b->id;
b->id = a_id;
}
答案 1 :(得分:0)
我想说如何对列表进行排序的最佳方法是实现merge sort。
你尝试做的仍然是选择排序,并且可行(实际上并不是很难)。您需要将指针保留到列表的最小元素,然后移动链接以使其位于head元素之前(记住也要移动头部)。我说你需要选择最小元素,因为通常只在一个链表中保留指向头部的指针。