#include<stdlib.h>
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * @author Senky
 * @date 2023.04.23
 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
 * @brief 时间复杂度是O(nlogn),用快排
 * @param head ListNode类 the head node
 * @return ListNode类
 */
 int compar_t(const void* p1, const void* p2)
 {
    return (*(int *)p1)-
        (*(int *)p2);
 }
struct ListNode* sortInList(struct ListNode* head ) 
{
    // write code here
    int size = 0;
    int str_index = 0;

    struct ListNode* p = head;

    /*计算链表的长度*/
    while(p)
    {
        size++;
        p = p->next;
    }

    /*申请数组*/
    int* str = malloc(size*sizeof(int));

    /*记录链表数据域*/
    {
        p = head;
        while(p)
        {
            str[str_index++] = p->val;
            p = p->next;
        }
    }

    /*排序数组*/
    qsort(str,size,sizeof(str[0]), compar_t);

    /*将排序好的证书元素写回链表*/
    {
        p = head;
        str_index = 0;
        while(p)
        {
            p->val = str[str_index++];
            p = p->next;
        }
    }

    return head;
}