• 23. 合并K个排序链表


    一种方法是分治  类似快排的例子。

    第二种使用堆,比较好理解。  堆中保存一个元素是一个链表的头部。 

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        
        
         public ListNode mergeKLists(ListNode[] lists) {
    		 
    		  if( lists == null || lists.length == 0 )
    			  return null;
    		  
    		  PriorityQueue<ListNode> queue = 
    				  new PriorityQueue<ListNode>(lists.length, new Comparator<ListNode>() {
    					public int compare(ListNode o1, ListNode o2) {
    						return o1.val - o2.val;
    					}
    				  });
    		  
    		  ListNode dummy = new ListNode(0);
    		  ListNode cur = dummy;
    		  
    		  for(ListNode list:lists) {
    			  if( list != null )
    				  queue.add(list);
    		  }
    		  
    		  while( !queue.isEmpty() ) {
    			  
    			  cur.next = queue.poll();
    			  cur = cur.next;
    			  if( cur.next != null )
    				  queue.add(cur.next);
    		  }
    		  return dummy.next;
    	  }
        
     
            
    }
    

      

  • 相关阅读:
    angular 个人零点学习
    angularjs 五大关键点
    OA项目学习总结
    oa
    时间插件
    angular js模态框
    搜索
    xianduanshu
    o-o
    paibingbuzhen
  • 原文地址:https://www.cnblogs.com/lijins/p/10148570.html
Copyright © 2020-2023  润新知