class Solution {
public:
int listSize(ListNode* l){
if(l==NULL) return 0;
int len=1;
ListNode* p=l;
while (p->next)
{
p=p->next;
++len;
}
return len;
}
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
int len1=listSize(l1);int len2=listSize(l2);
ListNode* p=l1;
ListNode* result=(ListNode*)malloc(sizeof(ListNode));
result->next=NULL;
result->val=p->val;
ListNode* q1=result;
for (int i=1;i<len1;++i)
{
p=p->next;
ListNode* s=(ListNode*)malloc(sizeof(ListNode));
s->val=p->val;
s->next=q1->next;
q1->next=s;
q1=q1->next;
}
ListNode* q=l2;
for (int i=0;i<len2;++i)
{
int time=0;
ListNode* curNode=result;
ListNode* preNode=result;
int temp=q->val;
while(curNode!=NULL&&curNode->val<temp){
if(time!=0){
preNode=preNode->next;
}
curNode=curNode->next;
++time;
}
if(time==0){
ListNode* newNode=(ListNode*)malloc(sizeof(ListNode));
newNode->val=temp;
newNode->next=result;
result=newNode;
q=q->next;
}else{
ListNode* newNode=(ListNode*)malloc(sizeof(ListNode));
newNode->val=temp;
newNode->next=preNode->next;
preNode->next=newNode;
q=q->next;
}
}
return result;
}
};