标签:ret class sort list 开始 head code public 就是 pre
归并排序的应用。本题将一个链表分为两个有个技巧,就是快慢两个指针,需要注意的是如果一开始 slow=fast=head 来做,后面是 fast=slow->next; slow->next=NULL 的话在两个元素的时候会死循环,因此要么改前面要么改后面。
class Solution { public: ListNode* sortList(ListNode* head) { if (head==NULL || head->next==NULL) return head; ListNode *slow=head, *fast=head->next; while (fast!=NULL && fast->next!=NULL){ slow = slow->next; fast = fast->next->next; } fast = slow->next; slow->next = NULL; return merge(sortList(head), sortList(fast)); } ListNode *merge(ListNode *left, ListNode *right){ ListNode *dummy=new ListNode(0); ListNode *p=left, *q=right, *r=dummy; while (p!=NULL && q!=NULL){ if (p->val<q->val){r->next=p; p=p->next;} else {r->next=q; q=q->next;} r = r->next; } while (p!=NULL){r->next=p; p=p->next; r=r->next;} while (q!=NULL){r->next=q; q=q->next; r=r->next;} return dummy->next; } };
标签:ret class sort list 开始 head code public 就是 pre
原文地址:https://www.cnblogs.com/hankunyan/p/9383959.html