题意:给一个链表排序。
题解:对链表快排?我选择归并,归并好写一些。
class Solution {
public:
ListNode* getmid(ListNode* head)
{
ListNode* fast,*slow;
fast = head,slow = head;
while(fast->next != NULL && fast->next->next != NULL)
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
ListNode* merge(ListNode* head1,ListNode* head2)
{
ListNode* head = new ListNode(0);
ListNode* ans = head;
while(head1 && head2)
{
if(head1->val < head2->val)
{
head->next = head1;
head1 = head1->next;
}
else
{
head->next = head2;
head2 = head2->next;
}
head = head->next;
}
head->next = head1 == NULL ? head2 : head1;
return ans->next;
}
ListNode* sortList(ListNode* head) {
if(head == NULL || head->next == NULL)
return head;
ListNode* mid = getmid(head);
ListNode* nxt = mid->next;
mid->next= NULL;
return merge(sortList(head),sortList(nxt));
}
};