为什么做这个呢?
因为深信服面试考了这个我没答出来啊阿西吧!
首先是归并排序啦
所谓的归并排序,就是,把一串数字两两分组排序,然后再两两分组排序,然后……
直到排完
看起来就很递归
至于取中值……
快慢指针大法好!
【代码有参照别人的
class Solution {
public:
ListNode* merge(ListNode* h1,ListNode* h2)
{
if(!h1) return h2;
if(!h2) return h1;
if(h1 -> val < h2 -> val)
{
h1 -> next = merge(h1 -> next,h2);
return h1;
}
else
{
h2 -> next = merge(h1,h2 -> next);
return h2;
}
return NULL;
}
ListNode* sortList(ListNode* head)
{
if(head == NULL || head -> next == NULL)
return head;
ListNode* fast = head;
ListNode* slow = head;
ListNode* pre = head;
while(fast && fast -> next)
{
pre = slow;
fast = fast -> next -> next;
slow = slow -> next;
}
pre -> next = NULL;
return merge(sortList(head),sortList(slow));
}
};
【啊,大佬的代码真是赏心悦目……】