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


    题目:

    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;
    }
  • 相关阅读:
    javascript 压缩空格代码演示
    javascript 正则表达式代码
    数据筛选和排序
    实现win的on程序数据更新
    使用listview控件展示数据
    初始windows程序
    构建布局良好的windows程序
    ADO.NET访问数据库
    模糊查询
    基本查询
  • 原文地址:https://www.cnblogs.com/shytong/p/5142698.html
Copyright © 2020-2023  润新知