码迷,mamicode.com
首页 > 编程语言 > 详细

【链表】Sort List(归并排序)

时间:2016-01-19 17:19:20      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

题目:

Sort a linked list in O(n log n) time using constant space complexity.

思路:

nlogn的排序有快速排序、归并排序、堆排序。双向链表用快排比较适合,堆排序也可以用于链表,单向链表适合用归并排序。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var sortList = function(head) {
    if(head==null||head.next==null){
        return head;
    }else{
        var slow=head,fast=head;
        while(fast.next!=null&&fast.next.next!=null){
            slow=slow.next;
            fast=fast.next.next;
        }
        //拆成两个链表
        fast=slow;
        slow=slow.next;
        fast.next=null;
        
        fast=sortList(head);
        slow=sortList(slow);
        return merge(fast,slow);
    }
};

function merge(head1,head2){
    if(head1==null){
        return head2;
    }
    if(head2==null){
        return head1;
    }
    var res=new ListNode(),p=new ListNode();
    if(head1.val<head2.val){
        res=head1;
        head1=head1.next;
    }else{
        res=head2;
        head2=head2.next;
    }
    p=res;
    
    while(head1!=null&&head2!=null){
        if(head1.val<head2.val){
            p.next=head1;
            head1=head1.next;
        }else{
            p.next=head2;
            head2=head2.next;
        }
        p=p.next;
    }
    
    if(head1!=null){
        p.next=head1;
    }else if(head2!=null){
        p.next=head2;
    }
    
    return res;
}

【链表】Sort List(归并排序)

标签:

原文地址:http://www.cnblogs.com/shytong/p/5142698.html

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