蓝蓝计算机考研第二期day15

68 阅读1分钟

21、合并两个有序链表

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

1、思路

申明两个指针变量,分别指向l1,l2,判断指针值的大小,根据指针值的大小,进行插入和赋值操作。

2、具体实现

/**
 * 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) {
        if(!l1)return l2;
        if(!l2)return l1;
        ListNode *result=NULL;
        if(l1->val<=l2->val)
        {
            result=l1;
            l1=l1->next;
            result->next=NULL;
        }
        else
        {
            result=l2;
            l2=l2->next;
            result->next=NULL;
        }
        ListNode * tamp=result;
        while(l1!=NULL&&l2!=NULL)
        {
             if(l1->val<=l2->val)
            {
                tamp->next=l1;
                l1=l1->next;
                tamp=tamp->next;
                tamp->next=NULL;

            }
            else
            {
                tamp->next=l2;
                l2=l2->next;
                tamp=tamp->next;
                tamp->next=NULL;
            }
        }
        if (l1 != NULL){
            tamp->next = l1;
        }else if(l2 != NULL)
            tamp->next = l2;
        return result;

};

};

3、小结

运用链表的插入相关知识,要注意理解链表各节点之间的联系。