解法一
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* newLis=new ListNode(-1),*cur=newLis;
while(l1&&l2){
if(l1->val>l2->val){
newLis->next=new ListNode(l2->val);
l2=l2->next;
}else{
newLis->next=new ListNode(l1->val);
l1=l1->next;
}
newLis=newLis->next;
}
newLis->next=(l1==NULL)?l2:l1;
return cur->next;
}
};
(l1==NULL)?l2:l1和l1?l2:l1有何区别
解法二:递归的写法
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(!l1) return l2;
if(!l2) return l1;
if(l1->val<l2->val){
l1->next=mergeTwoLists(l1->next,l2);
return l1;
}else{
l2->next=mergeTwoLists(l1,l2->next);
return l2;
}
}
另一种递归写法
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(!l1) return l2;
if(!l2) return l1;
ListNode* head=l1->val<l2->val?l1:l2;
ListNode* nonHead=l1->val<l2->val?l2:l1;
head->next=mergeTwoLists(head->next,nonHead);
return head;
}
解法四
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(!l1||(l2&&l1->val>l2->val)) swap(l1,l2);
if(l1) l1->next=mergeTwoLists(l1->next,l2);
return l1;
}