在C中对单链接列表中的元素进行排序

时间:2013-01-22 14:30:14

标签: c list

如何在单链表中对元素进行排序(通过某些值如list-> id)?我想出的想法是找到最大值并保存其索引。然后遍历列表,以便* head指针指向该元素......然后将此元素与第一个元素交换。最后一句......我怎么能这样做?

2 个答案:

答案 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元素之前(记住也要移动头部)。我说你需要选择最小元素,因为通常只在一个链表中保留指向头部的指针。