LeetCode:148. Sort List 排序链表(C语言)

题目描述:
在 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;
}

运行结果:
在这里插入图片描述

发布了124 篇原创文章 · 获赞 111 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/wangqingchuan92/article/details/104037031