题目描述:
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* sortList(struct ListNode* head)
{
struct ListNode* p = head;
int len = 0;
int i = 0;
int k = 0;
int *Num = NULL;
//计算链表长度
while(p)
{
len++;
p = p->next;
}
//申请内存空间
Num = (int*)malloc(sizeof(int)*len);
p = head;
//将链表内容依次复制到数组空间中
while(p)
{
Num[i]=p->val;
p=p->next;
i++;
}
//排序
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
qsort(Num,len,sizeof(int),comp);
p = head;
//将排好序的数组写到链表中
while(p)
{
p->val=Num[k];
p=p->next;
k++;
}
p = head;
free(Num);
return p;
}
运行结果: