/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1->next||list2->next){
return nullptr;
}
ListNode *r;
ListNode *p;
ListNode *q;
ListNode *m=new ListNode;
m->next=nullptr;
if(list1->next->val<=list2->next->val){
r=list2;
m->val=list1->val;
m->next=list1;
p=r->next;
q=list1->next;
}
else{
r=list1;
m->val=list2->val;
m->next=list2;
p=r->next;
q=list2->next;
}
while(p&&q){
if(p->val>=q->val){
ListNode *a=q;
q=q->next;
a->next=r->next;
r->next=a;
r=a;
}
else{
while(p->val<q->val&&p){
p=p->next;
r=r->next;
}
if(p){
ListNode *a=q;
q=q->next;
a->next=r->next;
r->next=a;
r=a;
}
else{
p->next=q;
}
}
}
return m;
}
};
2.递归:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1==nullptr){
return list2;
}
else if(list2==nullptr){
return list1;
}else if(list1->val<list2->val){
list1->next=mergeTwoLists(list1->next,list2);
return list1;
}
else {
list2->next=mergeTwoLists(list2->next,list1);
return list2;
}
}
};