为了防止空链表加入计算,如果遇到链表为空的时候,就删除掉,并重新遍历其他所有链表。
在输入链表和返回结果链表的前面全都新加了一个节点,或者说是指针,所以代码里面next有点多。
链表真的很容易出错啊,要调试一阵子才能通过。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if (lists == null || lists.size() == 0) {
return null;
}
ListNode resultHead = new ListNode(0);
ListNode temp = resultHead;
ListNode minNode = new ListNode(0);
ArrayList<ListNode> currLists = new ArrayList<ListNode>();
for (int i = 0; i < lists.size(); ++i) {
ListNode tempHead = new ListNode(0);
tempHead.next = lists.get(i);
currLists.add(tempHead);
}
while (currLists.size() > 0) {
int minVal = Integer.MAX_VALUE;
for (int i = 0; i < currLists.size(); ++i) {
ListNode currentHead = currLists.get(i);
if (currentHead.next == null) {
currLists.remove(i);
i = -1;
continue;
} else if (currentHead.next.val < minVal) {
minVal = currentHead.next.val;
minNode.next = currentHead;
}
}
if (currLists.size() > 0) {
temp.next = minNode.next.next;
temp = temp.next;
minNode.next.next = minNode.next.next.next;
}
}
return resultHead.next;
}
}