• 排序链表 优先队列+归并排序


    题目:

      给你链表的头结点 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;
        }
    }

      


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

          

        

  • 相关阅读:
    base64和Blob的相互转换
    限制文件上传的大小和尺寸
    git将本地项目提交到github
    vue-cli3创建项目时报错
    运行项目是node-sass报错的解决方法
    classList的使用
    将数组扁平化并去除其中重复数据,最终得到一个升序且不重复的数组
    移动端的图片放大
    js获取url中的参数
    HTML5-canvas
  • 原文地址:https://www.cnblogs.com/misscai/p/14899455.html
Copyright © 2020-2023  润新知