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;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *L, *tmp;
if(l1 == NULL ) return l2;
if(l2 == NULL ) return l1;
L=l1;
while(1)
{
if(L->val > l2->val)
{
tmp = ( struct ListNode* ) malloc( sizeof( struct ListNode* ) );
tmp->val = l2->val;
tmp->next = l1;
l1 = tmp;
L=l1;
l2 = l2->next;
}
else
{
if( L->next == NULL )
{
L->next=l2;
return l1;
}
if( L->next->val < l2->val)
{
L = L->next;
}
else {
tmp = ( struct ListNode* ) malloc( sizeof( struct ListNode* ) );
tmp->val = l2->val;
tmp->next = L->next;
L->next = tmp;
l2 = l2->next;
L = L->next;
}
}
if (l2 == NULL) break;
}
return l1;
}
思路比较混乱,代码也比较乱。。。大概是以list 1 为基准,如果l2的数较小,直接移动l1的头指针,如果l1前面的较小便移动指针将l2的数值穿插进去。