最简单的合并
合并k个已排序的链表
http://www.nowcoder.com/questionTerminal/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
1.两两合并
2.两个链表合并
/**
* 合并 k 个已排序的链表并将其作为一个已排序的链表
* @param lists
* @return
*/
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists==null || lists.size() < 1) return null;
if(lists.size()==1) return lists.get(0);
if(lists.size()%2!=0) lists.add(null);
ArrayList<ListNode> sum = new ArrayList<>();
for(int i=0;i<lists.size();i+=2)
{
sum.add(mergeTwoLists(lists.get(i),lists.get(i+1)));
}
return mergeKLists(sum);
}
/**
* 合并两个有序链表成一个有序链表
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
// write code here
if(l1==null) return l2;
if(l2==null) return l1;
ListNode h2 = new ListNode(0);
while (l1!=null)
{
ListNode next = l1.next;
h2 = addListNode(l1,l2);
l2 = h2;
l1 = next;
}
return h2;
}
/**
* 一个节点一个节点的插入
* @param node 要插入的节点
* @param head 头节点
*/
public ListNode addListNode(ListNode node, ListNode head)
{
ListNode h = new ListNode(0);
h.next = head;
ListNode q = h;
while (true)
{
if(head==null)
{
q.next = node;
node.next = null;
break;
}
if(node.val>head.val)
{
q = head;
head = head.next;
}else {
q.next = node;
node.next = head;
break;
}
}
return h.next;
}有大佬帮我算算复杂度吗?

