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.
/**
* 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) {
ListNode* headnew=NULL;
ListNode *t1=NULL;
ListNode *t2=NULL;
ListNode *t= NULL;
if (l1 == NULL)
return l2;
if (l2 == NULL)
return l1;
if (l1->val < l2->val)
{
headnew = l1;
if (headnew->next != NULL)
{
t1 = headnew->next;
t2 = l2;
}
else
{
l1->next = l2;
return l1;
}
}
else
{
headnew = l2;
if (headnew->next != NULL)
{
t2 = headnew->next;
t1 = l1;
}
else
{
l2->next = l1;
return l2;
}
}
t = headnew;
while (1)
{
// if (t1->next == NULL || t2->next == NULL)
// break;
if (t1->val <= t2->val)
{
t->next = t1;
if (t1->next != NULL)
{
t1 = t1->next;
t = t->next;
}
else
{
t = t->next;
t->next = t2;
break;
}
}
if (t2->val < t1->val)
{
t->next = t2;
if (t2->next != NULL)
{
t2 = t2->next;
t = t->next;
}
else
{
t = t->next;
t->next = t1;
break;
}
}
}
return headnew;
}
};