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;
        }
    }

      


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

          

        

  • 相关阅读:
    【JZOJ4807】破解
    输入挂(更新)
    Gorgeous Sequence(线段树)
    线段树套路系列
    hdu 3333 离线线段树 + 思维/树状数组 /在线主席树
    3183 RMQ / 贪心(坑成。。)
    hdu3594 强连通(仙人掌图)
    hdu3639 强连通
    hdu3861 强连通+最小路径覆盖
    图论--最小树形图朱刘算法模板
  • 原文地址:https://www.cnblogs.com/misscai/p/14899455.html
Copyright © 2011-2022 走看看