码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 148. Sort List

时间:2018-07-29 00:53:08      阅读:130      评论:0      收藏:0      [点我收藏+]

标签: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;
    }
};

 

LeetCode 148. Sort List

标签:ret   class   sort list   开始   head   code   public   就是   pre   

原文地址:https://www.cnblogs.com/hankunyan/p/9383959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!