- 使用mergeSort思想来进行链表排序;
- 主要思想:分治法
ListNode* sortList(ListNode *head){
//当前为空或者只有一个节点
ListNode *slow = head;
ListNode *fast = head;
//使用两个指针,一快一慢,来找到当前链表的中段,然后二分到两块进行处理
while(fast&&fast->next&&fast->next->next){
fast=fast->next->next;
slow=slow->next;
}
//fast 每次走两步 slow每次走一步,当fast到达尾部时,则slow刚好走到中间
//走到中间之后给截断
fast = slow->next;
slow->next =NULL;
}
ListNode* merge(ListNode *head1,ListNode *head2){
//使用指针保存
ListNode head(-1);
ListNode *p = head;
while(head1&&head2){
if(head1<head2){
p->next = head1;
head1=head1->next;
}else{
p->next = head2;
head2=head2->next;
}
p=p->next;
}
if(head1)
p->next = head1;
if(head2)
p->next = head2;
//因为定义的类型,所有这里不能够使用->next来表示next
return head.next;
}