方法1:递归(16ms)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
ListNode* l3=NULL;
if(l1->val<=l2->val){
l3=l1;
l3->next=mergeTwoLists(l1->next,l2);
}
else{
l3=l2;
l3->next=mergeTwoLists(l1,l2->next);
}
return l3;
}
};
方法二:vector容器(12ms)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
vector<ListNode*> nodes;
while(l1 != NULL){
if(l2==NULL)
break;
if(l1->val <= l2->val){
nodes.push_back(l1);
l1=l1->next;
}
else{
nodes.push_back(l2);
l2=l2->next;
}
}
if(l1==NULL){
while(l2!=NULL){
nodes.push_back(l2);
l2=l2->next;
}
}
else if(l2==NULL){
while(l1!=NULL){
nodes.push_back(l1);
l1=l1->next;
}
}
for(int i=0; i<nodes.size()-1; ++i){
nodes[i]->next=nodes[i+1];
}
nodes[nodes.size()-1]->next=NULL;
return nodes[0];
}
};
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
ListNode* l3=NULL;
if(l1->val<=l2->val){
l3=l1;
l3->next=mergeTwoLists(l1->next,l2);
}
else{
l3=l2;
l3->next=mergeTwoLists(l1,l2->next);
}
return l3;
}
};
方法二:vector容器(12ms)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
vector<ListNode*> nodes;
while(l1 != NULL){
if(l2==NULL)
break;
if(l1->val <= l2->val){
nodes.push_back(l1);
l1=l1->next;
}
else{
nodes.push_back(l2);
l2=l2->next;
}
}
if(l1==NULL){
while(l2!=NULL){
nodes.push_back(l2);
l2=l2->next;
}
}
else if(l2==NULL){
while(l1!=NULL){
nodes.push_back(l1);
l1=l1->next;
}
}
for(int i=0; i<nodes.size()-1; ++i){
nodes[i]->next=nodes[i+1];
}
nodes[nodes.size()-1]->next=NULL;
return nodes[0];
}
};