1 import java.util.*; 2 3 /** 4 * Definition for singly-linked list. 5 * public class ListNode { 6 * int val; 7 * ListNode next; 8 * ListNode(int x) { 9 * val = x; 10 * next = null; 11 * } 12 * } 13 */ 14 public class Solution { 15 16 public ListNode mergeKLists(ArrayList<ListNode> lists) { 17 // 初始返回结果 18 ListNode result = null; 19 // 依次将待合并的链表与当前返回结果进行合并 20 for(ListNode node : lists) { 21 result = merge(result, node); 22 } 23 // 返回结果 24 return result; 25 } 26 27 public ListNode merge(ListNode list1,ListNode list2) { 28 // 添加头节点 29 ListNode root = new ListNode(-1); 30 // 定义临时变量 31 ListNode temp1 = list1; 32 ListNode temp2 = list2; 33 ListNode current = root; 34 // 拼接新链表 35 while(temp1 != null && temp2 != null) { 36 if (temp1.val < temp2.val) { 37 current.next = temp1; 38 temp1 = temp1.next; 39 } else { 40 current.next = temp2; 41 temp2 = temp2.next; 42 } 43 current = current.next; 44 } 45 if (temp1 == null) { 46 current.next = temp2; 47 } 48 if (temp2 == null) { 49 current.next = temp1; 50 } 51 // 返回结果 52 return root.next; 53 } 54 }
1 import java.util.*; 2 3 /** 4 * Definition for singly-linked list. 5 * public class ListNode { 6 * int val; 7 * ListNode next; 8 * ListNode(int x) { 9 * val = x; 10 * next = null; 11 * } 12 * } 13 */ 14 public class Solution { 15 16 public ListNode mergeKLists(ArrayList<ListNode> lists) { 17 // 验证特殊场景 18 if(lists == null || lists.size() == 0) { 19 return null; 20 } 21 // 使用递归排序的思想合并链表 22 return mergeGroupLists(lists, 0, lists.size() - 1); 23 } 24 25 public ListNode mergeGroupLists(List<ListNode> lists, int left, int right) { 26 // 返回区间合并结果 27 if (left == right) { 28 return lists.get(left); 29 } 30 // 计算中间点 31 int mid = (left + right) / 2; 32 // 将两个链表合并成一个链表 33 return merge(mergeGroupLists(lists, left, mid), mergeGroupLists(lists, mid + 1, right)); 34 } 35 }
标签:null,ListNode,05,lists,next,链表,temp2,排序 From: https://www.cnblogs.com/StringBuilder/p/17832868.html