zoukankan      html  css  js  c++  java
  • 排序链表 优先队列+归并排序

    题目:

      给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

    思路:

      思1 :优先队列将链表数据入队,新建一个ListNode 将数据连接起来,注意保存头指针进行返回

      思2 :归并排序 (递归拆分,将拆分后的归并起来---666) (注意掌握


    (一)代码   优先队列       时间复杂度:O(n logn) 空间复杂度:O(n)

      


    (二)归并方法  递归拆分为两段,将两段按顺序和起来(归并

    import java.util.PriorityQueue;
    
    //归并
    //先拆分 在合并
    class Solution {
        public ListNode sortList(ListNode head) {
            //空指针判断
            if(head == null){
                return head;
            }
            return splitListNode(head);
        }
    
        //拆分函数,运用快慢指针,当快指针的next为空时,慢指针就走到了中间的位置
        public ListNode splitListNode(ListNode head){
            //递归出口
            if(head == null || head.next == null) return head;
            ListNode slow = head;  //慢指针
            ListNode fast = head;  //快指针
            while(fast != null && fast.next != null && fast.next.next != null){
                  fast = fast.next.next; //移动指针
                  slow = slow.next;      //移动指针
            }
            //递归
            ListNode right = splitListNode(slow.next);
            slow.next = null;  //注意此处,需要回归理解
            ListNode left = splitListNode(head);
            return merge(left,right);
        }
    
        //合并链表函数
        public ListNode merge(ListNode left,ListNode right){
    
            ListNode listNode = new ListNode(0);
            ListNode resNode = listNode; //定义返回的头结点
            while(left != null && right != null){
                if(left.val <= right.val){
                    listNode.next = left;
                    left = left.next;
                }else{
                    listNode.next = right;
                    right = right.next;
                }
                listNode = listNode.next;
            }
            if(left != null) listNode.next = left;
            if(right != null) listNode.next = right;
            return resNode.next;
        }
    }

      


          入市赌一把,单车 或 摩托 ?

          

        

  • 相关阅读:
    scikit-learn随机森林调参小结
    用Spark学习FP Tree算法和PrefixSpan算法
    典型关联分析(CCA)原理总结
    scikit-learn Adaboost类库使用小结
    Google maps API开发(二)(转)
    php中setcookie函数用法详解(转)
    关于中英数字混排的字符串分割问题(转)
    字符串截取函数
    jQuery Masonry构建pinterest网站布局注意要点(转)
    【jQuery插件】用jQuery Masonry快速构建一个pinterest网站布局(转)
  • 原文地址:https://www.cnblogs.com/misscai/p/14899455.html
Copyright © 2011-2022 走看看