Sort a linked list in O(n log n) time using constant space complexity.
解题思路:
(1)将链表中的值依次取出存在一个数组中
(2)对数组进行希尔排序
(3)将排序后的元素放回链表中
struct ListNode* sortList(struct ListNode* head) {
struct ListNode* head1 = head;
int size = 0;
while (head1 != NULL)
{
size++;
head1 = head1->next;
}
int* nums = (int*)malloc(sizeof(int)*size);
head1 = head;
for (int i = 0; i < size; i++)
{
nums[i] = head1->val;
head1 = head1->next;
}
for (int Incre = size/2; Incre > 0; Incre /= 2)
{
for (int i = Incre; i < size; i++)
{
int temp = nums[i];
int j;
for (j = i; j >= Incre; j -= Incre)
{
if (temp < nums[j-Incre])
nums[j] = nums[j-Incre];
else
break;
}
nums[j] = temp;
}
}
head1 = head;
for (int i = 0; i < size; i++)
{
head1->val = nums[i];
head1 = head1->next;
}
free(nums);
return head;
}