/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 the head node * @return ListNode类 */ int cmp(const void *a, const void *b) { return (*(int*)a - *(int*)b); } #include <stdlib.h> struct ListNode* sortInList(struct ListNode* head ) { // write code here struct ListNode *p = NULL; int len = 0; p = head; while(p != NULL) { p = p->next; len++; } int *arr = (int*)malloc(sizeof(int) * len ); p = head; int count = 0; while(p) { arr[count++] = p->val; p = p->next; } qsort(arr, count, sizeof(int),cmp); p = head; int i = 0; while(p) { p->val = arr[i++]; p = p->next; } free(arr); return head; }
思路:
1.遍历链表,得出链表长度。
2.利用该长度,动态分配数组。将链表中的值存入数组中。
3.利用C库的qsort函数给数组排序。
4.之后再将数组的值赋给链表