/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head node
* @return ListNode类
*/
ListNode* merge2List(ListNode* l1, ListNode* l2) {
if (!l1) {
return l2;
} else if (!l2) {
return l1;
}
if (l1->val < l2->val) {
l1->next = merge2List(l1->next, l2);
return l1;
} else {
l2->next = merge2List(l1, l2->next);
return l2;
}
}
ListNode* sortInList(ListNode* head) {
// write code here
if (!head || !head->next)
return head;
ListNode* slow = head, * fast = head->next;
//fast不这样操作,会导致只有两个节点的时候出问题
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
ListNode* tmp = slow->next;
slow->next = nullptr;
ListNode* left = sortInList(head);
ListNode* right = sortInList(tmp);
ListNode* ans = merge2List(left, right);
return ans;
}
};