
迭代法
java
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode result = new ListNode(0);
ListNode cur = result;
while(list1!=null && list2!=null){
//判断list1和list2的大小
int val1 =list1.val;
int val2 =list2.val;
if(val1<val2){
//取最小的
ListNode node = new ListNode(val1);
cur.next=node;
cur=cur.next;
list1=list1.next;
}else if(val1> val2){
ListNode node = new ListNode(val2);
cur.next=node;
cur=cur.next;
list2=list2.next;
}else{
ListNode node1 = new ListNode(val1);
ListNode node2 = new ListNode(val2);
cur.next=node1;
cur=cur.next;
cur.next=node2;
cur=cur.next;
list1=list1.next;
list2=list2.next;
}
}
//如果list1还有,则直接将list1插入到后面
while(list1 !=null){
cur.next=list1;
cur=cur.next;
list1=list1.next;
}
//同理list2
while(list2!=null){
cur.next=list2;
cur=cur.next;
list2=list2.next;
}
return result.next;
}
递归法
java
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null || l2 == null){
return l1==null ? l2 : l1;
}
if(l1.val <=l2.val){
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next=mergeTwoLists(l1,l2.next);
return l2;
}
}