因为链表是节点式存储,不能做到随机存储,但是对于两个有序链表之间的合并不需要额外的空间,在O(1)空间复杂度O(n)时间复杂度内即可完成。所以对于链表排序,使用归并排序比较划算。
typedef struct Node List;
struct Node
{
int value;
List* next;
};
//链表节点结构体
首先合并两个有序的链表:
/*
在合并的时候始终保持一个链表的节点插入另一个链表中
这里始终保证first是最终的链表,将second链表中的每一个节点逐步插入到first中
*/
List* Merge(List* first,List* second)
{
List* head = NULL;
List* current = NULL;
if(first == NULL)
return second;
if(second == NULL)
return first;
if(first->value > second->value)
{
current = first;
first = second;
second = current;
}
head = first;
current = first;
first = first->next;
//始终将second的节点插入到first链表中
while( first != NULL && second != NULL)
{
List* temp = NULL;
if(first->value > second-