23. 合併K個排序連結串列 java 23
阿新 • • 發佈:2019-01-23
合併 k 個排序連結串列,返回合併後的排序連結串列。請分析和描述演算法的複雜度。
示例:
輸入: [ 1->4->5, 1->3->4, 2->6 ] 輸出: 1->1->2->3->4->4->5->6
程式碼第二部分不理解,後續補充
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ //實際上是對連結串列的k個節點組成的head分別處理 class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists==null||lists.length==0){ return null; } return MSort(lists,0,lists.length -1);//lists.lengt=k,k個連結串列頭 } //這一段程式碼不怎麼理解 public ListNode MSort(ListNode[] lists, int low, int high) { if (low < high) { int mid = (low + high) / 2; ListNode leftlist = MSort(lists, low, mid); ListNode rightlist = MSort(lists, mid + 1, high); return mergeTwoLists(leftlist, rightlist); } // 如果相等,只有一個元素,返回即可 return lists[low]; } public ListNode mergeTwoLists(ListNode l1,ListNode l2){ ListNode res= null; if(l1==null) return l2; if(l2==null) return l1; if(l1.val<l2.val){ res=l1; l1.next=mergeTwoLists(l1.next,l2); } else{ res=l2; l2.next=mergeTwoLists(l1,l2.next); } return res; } }