1、题目:
Sort a linked list in O(n log n) time using constant space complexity.
Example 1:
Input: 4->2->1->3 Output: 1->2->3->4
Example 2:
Input: -1->5->3->4->0 Output: -1->0->3->4->5
2、解答:找到中间结点,排序,递归的进行
3、C++代码:
class Solution {
public:
ListNode* sortList(ListNode* head) {
if(head == NULL)
return head;
else if(head->next == NULL)
return head;
else{
vector<int> v;
struct ListNode *curr = head;
while(curr != NULL){
v.push_back(curr->val);
curr = curr->next;
}
sort(v.begin(),v.end());
curr = head;
for(int i =0 ;i<v.size();i++){
curr->val = v.at(i);
curr = curr->next;
}
return head;
}
}
};
python 代码
class Solution:
def sortList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
middle_node = self.find_middle_node(head)
right_head = middle_node.next
middle_node.next = None
return self.merge(self.sortList(head),self.sortList(right_head))
def find_middle_node(self,head):
slow,fast = head,head.next
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow
def merge(self,head1,head2):
dummy = ListNode(None)
curr = dummy
while head1 and head2:
if head1.val < head2.val:
curr.next = head1
head1 = head1.next
else:
curr.next = head2
head2 = head2.next
curr = curr.next
curr.next = head1 or head2
return dummy.next