单链表:
l1->next->next->next.....->null
两种思路:
1.非递归:
public static ListNode mergeTwoLists_2(ListNode l1, ListNode l2) {
if(l1==null){
return l2;
}
if(l2==null){
return l1;
}
ListNode merged=null;
ListNode currt=null;
//获取头结点
if(l1!=null&&l2!=null){
if(l1.val<l2.val){
merged=l1;
l1=l1.next;
}else{
merged=l2;
l2=l2.next;
}
}
currt=merged;
while(l1!=null&&l2!=null){
if(l1.val<l2.val){
currt.next=l1;
l1=l1.next;
}else{
currt.next=l2;
l2=l2.next;
}
currt=currt.next;
}
if(l1!=null){
currt.next=l1;
}
if(l2!=null){
currt.next=l2;
}
return merged;
}
1.1 找到头结点,(这个节点是要用来返回的)
1.2头结点的另一个引用,把小的那个值的节点连上。
最后当其中一个链表的节点的下一个值为空的时候就停了。
2,递归,其实差不多了,递归的一个动作只是找到两个节点的中的小值的节点
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null){
return l2;}
if(l2==null){
return l1;}
if(l1.val<l2.val){
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next=mergeTwoLists(l1,l2.next);
return l2;
}