struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if
(l1==NULL){
return
l2;
}
if
(l2==NULL){
return
l1;
}
struct ListNode *l = (struct ListNode*)malloc(sizeof(struct ListNode));
l->next = NULL;
struct ListNode *list1 = l1;
struct ListNode *list2 = l2;
if
(l1->val<l2->val){
l->val=l1->val;
if
(list1->next==NULL){
l->next=list2;
return
l;
}
list1=list1->next;
}
else
{
l->val=l2->val;
if
(list2->next==NULL){
l->next=list1;
return
l;
}
list2=list2->next;
}
struct ListNode *list = l;
while
(list1->next!=NULL&&list2->next!=NULL){
if
(list1->val<=list2->val){
struct ListNode *body = (struct ListNode *)malloc(sizeof(struct ListNode));
body->val = list1->val;
body->next = NULL;
list->next = body;
list = list->next;
list1 = list1->next;
}
else
{
struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
body->val=list2->val;
body->next=NULL;
list->next=body;
list=list->next;
list2=list2->next;
}
}
if
(list1->next==NULL){
while
(list2->next!=NULL){
if
(list1->val<=list2->val){
list->next = list1;
list = list->next;
list->next=list2;
return
l;
}
else
{
struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
body->val=list2->val;
body->next=NULL;
list->next=body;
list=list->next;
list2=list2->next;
}
}
}
else
{
while
(list1->next!=NULL){
if
(list2->val<=list1->val){
list->next=list2;
list=list->next;
list->next=list1;
return
l;
}
else
{
struct ListNode *body = (struct ListNode*)malloc(sizeof(struct ListNode));
body->val=list1->val;
body->next=NULL;
list->next=body;
list=list->next;
list1=list1->next;
}
}
}
if
(list1->next==NULL&&list2->next==NULL){
if
(list1->val<=list2->val){
list->next = list1;
list=list->next;
list->next=list2;
}
else
{
list->next=list2;
list=list->next;
list->next=list1;
}
}
return
l;
}