/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode merge2Lists(ListNode l1,ListNode l2)
{
ListNode head=new ListNode(0);//主要的tips1:如何实例化一个节点
ListNode result=head;//主要的tips2:需要定义一个节点来保留头节点
while(l1!=null&&l2!=null)
{
if(l1.val<l2.val)
{result.next=l1;
l1=l1.next;
}
else{
result.next=l2;
l2=l2.next;
}
result=result.next;//主要的tips3:节点往后走
}
if(l1!=null)
result.next=l1;
if(l2!=null)
result.next=l2;
return head.next;
}//两个list的合并
public ListNode mergeKLists(ListNode[] lists) {
int len=lists.length;
if(lists==null||len==0) return null;
ListNode origin=lists[0];
if(len==1) return lists[0];
if(len==2) return merge2Lists(lists[0],lists[1]);
for(int i=1;i<len;i++)
{
origin=merge2Lists(origin,lists[i]);
}
return origin;
}
}
/*其中 完整测试版本*/
//23合并K个排序链表 class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public class L18 { public static void main(String[] args) { ListNode l1=new ListNode(4); ListNode l2=new ListNode(9); ListNode l3=new ListNode(4); l3.next=l2; ListNode[] lists={l1,l3}; ListNode result=mergeKLists(lists); while(result!=null) { System.out.println(result.val); result=result.next; } } static ListNode merge2Lists(ListNode l1,ListNode l2) { ListNode head=new ListNode(0); ListNode result=head; while(l1!=null&&l2!=null) { if(l1.val<l2.val) {result.next=l1; l1=l1.next; } else{ result.next=l2; l2=l2.next; } result=result.next; } if(l1!=null) result.next=l1; if(l2!=null) result.next=l2; return head.next; }//两个list的合并 static ListNode mergeKLists(ListNode[] lists) { int len=lists.length; ListNode origin=lists[0]; if(lists==null||len==0) return null; if(len==1) return lists[0]; if(len==2) return merge2Lists(lists[0],lists[1]); for(int i=1;i<len;i++) { origin=merge2Lists(origin,lists[i]); } return origin; } }