单链表实现时间复杂度nlogn, 空间复杂度为常数的归并算法。
作为复习,下面回顾一下归并排序的大致思路
归并排序举个例子就是,假如需要对一个大小为8的数列进行排序,那个首先分成两个大小为4的数列并排序,将这两个大小为4的数列排序后进行合并即可得到排序好的数组。对大小为4的数列进行排序时,又可以分成两个大小为2的数列进行排序后合并。体现了分治的思想。
代码比较巧妙的是快慢指针&链表分割
以下是C++实现代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *sortList(ListNode *head) {