• 23. Merge K Sorted Lists (Java, 归并排序的思路)


    题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

    解析:合并k个已经有序的单链表,使其最终成为一个有序的单链表。原理就是归并排序,递归运算。基本算法recusion 与 merge

    编码:

    public ListNode mergeKLists(ListNode[] lists) {
            if(lists == null || lists.length == 0)
               return null;
            if(lists.length == 1)
               return lists[0];
            return recursion(lists,0,lists.length - 1);
        }
        //recursion
        public ListNode recursion(ListNode[] lists,int start,int end){
            if(start == end)//只有一个链表
               return lists[start];
            if(start < end){
                int mid = start + (end - start) / 2; //注意:这里防止整数越界的处理,start+(end-start)/2
                ListNode l1 = recursion(lists,start,mid);
                ListNode l2 = recursion(lists,mid + 1,end);
                return merge(l1,l2);
            } else
                return null;
            
        }
        //merge
        public ListNode merge(ListNode l1,ListNode l2){
            ListNode head = new ListNode(0); //创建一个头结点,最后还要删掉
            ListNode p = head;
            while(l1 != null && l2 != null){
                if(l1.val <= l2.val){
                    p.next = l1;
                    l1 = l1.next;
                } else{
                    p.next = l2;
                    l2 = l2.next;
                }
                p = p.next;
            }
            
            p.next = (l1 != null) ? l1 : l2;
            return head.next;// head的下一个节点是第一个数据结点
        }
  • 相关阅读:
    samdump2获取虚拟机密码
    PHP执行cmd方法若干
    Aircrack-ng学习笔记之无AP破解WiFi密码
    Python基础:extend与append的区别
    Python基础:dictionary
    UVALive 3177 长城守卫
    UVALive 3902 网络
    UVA 11520 填充正方形
    UVALive 3635 分派
    UVALive 3971 组装电脑
  • 原文地址:https://www.cnblogs.com/mydesky2012/p/5768913.html
Copyright © 2020-2023  润新知