LeetCode 21. 合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

/**
 * 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 *l3, *p, *s ;     // p指针指向链表最后一个节点
        l3 = new ListNode(0);
        p = l3 ;
        while(l1 != NULL || l2 != NULL)    // 只要l1 l2不全是空链表就一直循环
        {
            int num1,num2;
            bool flag1=false,flag2=false;   //  链表到结尾的标志位
            if(l1 == NULL)
            {
                flag1 = true;
            }
            else
            {
                num1 = l1->val ;
            }
            if(l2 == NULL)
            {
                flag2 = true;
            }
            else
            {
                num2 = l2->val ;
            }
            if(num1<=num2  )
            {   
                if(flag1)
                {
                    s = new ListNode(0);
                    s->val = num2 ;
                    s->next = NULL ;
                    p->next = s;
                    l2 = l2->next ;
                    p = p->next ;
                }
                else
                {
                    s = new ListNode(0);
                    s->val = num1 ;
                    s->next = NULL ;
                    p->next = s;  
                    l1 = l1->next;
                    p = p->next ;
                }              
            }
            else
            {
                if(flag2)
                {
                    s = new ListNode(0);
                    s->val = num1 ;
                    s->next = NULL ;
                    p->next = s;  
                    l1 = l1->next;
                   p = p->next ;                     


                }
                else
                {
                    s= new ListNode(0);
                    s->val = num2 ;
                    s->next = NULL ;
                    p->next = s;   
                    l2 = l2->next ; 
                     p = p->next ;
                }
            }      
        }
              return l3->next ;          
    }
};

猜你喜欢

转载自blog.csdn.net/wx734518351/article/details/80210225