题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
public ListNode mergeKLists(ArrayList<ListNode> lists) { //参数校验 ListNode result = null; if(lists == null || lists.size() == 0) return null; if(lists.size() == 1 ) return lists.get(0); for(int i = 0; i < lists.size(); i++){ if(i == 0){ result = Merge(lists.get(i), lists.get(i + 1)); i = i+1; }else{ result = Merge(result,lists.get(i)); } } return result; } public ListNode Merge(ListNode list1, ListNode list2) { //结果集 ListNode head = null; ListNode result = null; //节点校验 if (list1 == null && list2 == null) return null; if (list2 == null) { return list1; } else if (list1 == null) { return list2; } //取两个链表的第一元素 while (list1 != null || list2 != null) { if (head == null) { //第一次循环 if (list1.val >= list2.val) { head = list2; list2 = list2.next; } else { head = list1; list1 = list1.next; } result = head; continue; } //当list1为空时 if (list1 == null) { head.next = list2; list2 = list2.next; head = head.next; continue; } //当list2为空时 if (list2 == null) { head.next = list1; list1 = list1.next; head = head.next; continue; } //当两者都不为空时 if (list1.val >= list2.val) { head.next = list2; list2 = list2.next; } else { head.next = list1; list1 = list1.next; } head = head.next; } return result; }