21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode t1=l1,t2=l2;
ListNode head=new ListNode(0);
ListNode next=head;
while(t1!=null&&t2!=null){
if(t1.val<t2.val){
next.next=new ListNode(t1.val);
t1=t1.next;
}else{
next.next=new ListNode(t2.val);
t2=t2.next;
}
next=next.next;
}
if(t1!=null){
next.next=t1;
}else if(t2!=null){
next.next=t2;
}
return head.next;
}
}
23. 合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
class Solution {
private ListNode mergeTwoLists(ListNode l1,ListNode l2){
if(l1==null)
return l2;
else if(l2==null)
return l1;
else if(l1==l2)
return l1;
ListNode t1=l1,t2=l2;
ListNode head=new ListNode(0);
ListNode next=head;
while(t1!=null&&t2!=null){
if(t1.val<t2.val){
next.next=new ListNode(t1.val);
t1=t1.next;
}else{
next.next=new ListNode(t2.val);
t2=t2.next;
}
next=next.next;
}
if(t1!=null){
next.next=t1;
}else{
next.next=t2;
}
return head.next;
}
private ListNode merge(ListNode[] lists,int left,int right){
if(lists==null||lists.length<=0)
return null;
int mid=(left+right)/2;
if(mid==left){
return mergeTwoLists(lists[left],lists[right]);
}else{
ListNode nodeleft=merge(lists,left,mid);
ListNode noderight=merge(lists,mid+1,right);
return mergeTwoLists(nodeleft,noderight);
}
}
public ListNode mergeKLists(ListNode[] lists) {
return merge(lists,0,lists.length-1);
}
}