21. Merge Two Sorted Lists
DescriptionHintsSubmissionsDiscussSolution
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
int time=0;
struct ListNode * p; struct ListNode * q;
p = (struct ListNode *)malloc(sizeof(struct ListNode));
q = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode * l21=NULL;
l21 = (struct ListNode *)malloc(sizeof(struct ListNode));
p=l1;
q=l2;
// p=l1->next;q=l2->next;
while(p!=NULL)
{
if(q==NULL)
l2=l1;
else if(p->val<=q->val)
{ struct ListNode * h=NULL;
h = (struct ListNode *)malloc(sizeof(struct ListNode));
if(time==0)
{
h->next=q;
h->val=p->val;
l2=h;
l21=h;
time=1;
}
else
{
h->next=q;
l21->next=h;
h->val=p->val;
l21=h;
}
}
else
{while (q->next!=NULL && p->val>q->next->val)
{ q=q->next;}
if(q->next==NULL){q->next=p;break;}
else{
struct ListNode * h=NULL;
h = (struct ListNode *)malloc(sizeof(struct ListNode));
h->next=q->next;
q->next=h;
h->val=p->val;
l21=h;
q=l21->next;
time=1;
}
}
p=p->next;
}
return l2;
}