解法一:新建一个链表存放有序的合并链表。当list1
和list2
至少有一个非空时,返回非空的;否则找出两个链表的最小值作为新链表的头,然后依次比较两链表,每次都先插入小的值。
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode new_list=null;
if(list1 != null && list2 != null){
if(list1.val<=list2.val){
new_list=list1;
list1=list1.next;
new_list.next=null;
}
else{
new_list=list2;
list2=list2.next;
new_list.next=null;
}
}
else{
return list1!=null?list1:list2;
}
ListNode curr=new_list;
while(list1 != null && list2 != null){
if(list1.val<=list2.val){
ListNode temp = list1.next;
curr.next=list1;
list1.next=null;
list1=temp;
}
else{
ListNode temp = list2.next;
curr.next=list2;
list2.next=null;
list2=temp;
}
curr=curr.next;
}
if(list1!=null){
curr.next=list1;
}
if(list2!=null){
curr.next=list2;
}
return new_list;
}
}
注意:
- 当list1和list2至少有一个非空时,返回非空的:
list1!=null?list1:list2
,若list1
和list2
都为null
,list1
和list2
都可以返回。