1. class Solution {
    2. public ListNode mergeKLists(ListNode[] lists) {
    3. if(lists == null || lists.length == 0){
    4. return null;
    5. }
    6. if(lists.length == 1){
    7. return lists[0];
    8. }
    9. return split(lists, 0, lists.length-1);
    10. }
    11. public ListNode split(ListNode[] lists, int left, int right){
    12. if(left == right){
    13. return lists[left];
    14. }
    15. int mid = left + (right-left)/2;
    16. return mergeTwoLists(split(lists, left, mid), split(lists, mid+1, right));
    17. }
    18. public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    19. if(l1 == null){
    20. return l2;
    21. }
    22. if(l2 == null){
    23. return l1;
    24. }
    25. ListNode head = null;
    26. ListNode tmp = null;
    27. if(l1.val <= l2.val){
    28. tmp = l1;
    29. head = l1;
    30. l1 = l1.next;
    31. } else {
    32. tmp = l2;
    33. head = l2;
    34. l2 = l2.next;
    35. }
    36. while(l1!=null && l2!=null){
    37. if(l1.val <= l2.val){
    38. tmp.next = l1;
    39. l1 = l1.next;
    40. } else {
    41. tmp.next = l2;
    42. l2 = l2.next;
    43. }
    44. tmp = tmp.next;
    45. tmp.next = null;
    46. }
    47. if(l1 != null){
    48. tmp.next = l1;
    49. }
    50. if(l2 != null){
    51. tmp.next = l2;
    52. }
    53. return head;
    54. }
    55. }