public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
1.循环+双指针
时间复杂度O(m+n) ;
空间复杂度O(1)
public ListNode mergeTwoLists(ListNode l1, ListNode l2){
if(l1 == null){
return l2;
}
if(l2==null){
return l1;
}
ListNode resultNode = new ListNode(0);
ListNode p = resultNode;
while (l1 !=null && l2!=null){
if(l1.val < l2.val ){
p.next = l1;
l1 = l1.next;
}else {
p.next = l2;
l2 = l2.next;
}
p=p.next;
}
if(l1 !=null){
p.next = l1;
}
if(l2 !=null){
p.next = l2;
}
return resultNode.next;
}
2.递归
时间复杂度O(m+n)
因为递归涉及到出栈和入栈,所以空间复杂度为O(m+n)
public 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;
}
l2.next = mergeTwoLists2(l1,l2.next);
return l2;
}