遍历l2,将l2的节点加入到l1中,遍历l1做检查,如果l2的val比l1的大则插入到l1的首部(注意到l1已经被改变,所以需要一个变量来保持最终的l1),否则找到l2应该插入到l1的位置,插入即可。应该注意保持链表不会断。

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        // write code here
        //遍历l2将其插入到l1中,保证有序;
        if(!l1)
            return l2;
        ListNode* p1 = l1;

        while(l2)
        {
            while(l1)
            {
                if(l2->val >= l1->val)
                {
                    if(l1->next)
                    {
                         if(l2->val <= l1->next->val)
                         {
                             //插入到l1并且保证链表不会断;
                             ListNode* tmp2 = l2->next;
                             ListNode* tmp = l1->next;
                             l1->next = l2;
                             l2->next = tmp;
                             l2 = tmp2;
                             break;
                         }
                    }else
                    {
                        //临时保存l2的下一个节点;
                        ListNode* tmp = l2->next;

                        //直接插入到l1;
                        l1->next = l2;
                        l1 = l1->next;
                        l1->next = NULL;

                        l2 = tmp;
                        break;
                    }
                }
                else
                {
                    //l2的val比l1的大,插入到l1的前面;
                    ListNode* tmp = l2->next;
                    l2->next = l1;
                    l1 = l2;

                    l2 = tmp;

                    p1 = l1;
                    break;
                }

                l1 = l1->next;
            }
        }
        return p1;
    }
};