import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类ArrayList * @return ListNode类 */ public ListNode mergeKLists (ArrayList<ListNode> lists) { // write code here int n = lists.size(); ListNode head = new ListNode(0); ListNode cur = head; ListNode inf = new ListNode(1001); //记录每次遍历minNode的索引j int j = 0; //初始化minNode ListNode minNode = inf; while(true){ for(int i=0;i<n;i++){ if (lists.get(i) != null){ if (minNode.val > lists.get(i).val){ //遍历过程中不断更新minNode与j minNode = lists.get(i); j = i; } } } if(minNode == inf){ //最后一次遍历,minNode还是初始值,说明所有节点都已经被添加到head中,终止循环 break; }else{ //更新lists[j],将minnode添加到cur后面 lists.set(j,minNode.next); cur.next = minNode; cur = cur.next; //初始化minNode minNode = inf; } } return head.next; } }
用一个minNode跟一个指针j记录每次遍历lists得到的最小的Node,把得到的minNode放在cur后面,之后把第j个链表的头指针后移,并初始化minNode,这样循环往复,直到所有的链表节点被遍历完,break循环.