/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * * @param head ListNode类 the head node * @return ListNode类 */ //归并算法 void MergeSort(int* a,int left,int right,int* tmp) { if(left>=right) { return; } int mid =(left+right)>>1; //相当于除以2 MergeSort(a,left,mid,tmp); MergeSort(a,mid+1,right,tmp); int begin1=left,end1=mid; int begin2=mid+1,end2=right; int index=left; while(begin1 <= end1 && begin2 <= end2) { if(a[begin1]<a[begin2]) { tmp[index++]=a[begin1++]; } else { tmp[index++]=a[begin2++]; } } while(begin1<=end1) { tmp[index++]=a[begin1++]; } while(begin2<=end2) { tmp[index++]=a[begin2++]; } //将tmp拷贝到a[]中 for(int i=left;i<=right;i++) { a[i]=tmp[i]; } } struct ListNode* sortInList(struct ListNode* head ) { int size=0; struct ListNode* cur=head; while(cur != NULL) { size++; cur=cur->next; } //将链表中的元素复制到数组中 int* a=(int*)malloc(sizeof(int)*size); cur=head; for(int i=0;cur != NULL;i++) { a[i]=cur->val; cur=cur->next; } int* tmp=(int*)malloc(sizeof(int)*size); MergeSort(a,0,size-1,tmp); //将a中的值拷贝到head中 cur=head; for(int i=0;cur != NULL;i++) { cur->val=a[i]; cur=cur->next; } free(tmp); free(a); return head; }