21. Merge Two Sorted Lists【力扣】

题意理解

合并两个有序单链表,新链表也是有序。

问题分析

三个循环,第一个循环如果两个链表都不空,比较当前链表值的大小,如果第一个链表值小,当前第一个链表值装入新链表,后移指针;如果第二个链表值小,当前第二个链表值装入新链表,后移指针;

第二个循环如果第一个链表不空,将后续链表接入新链表

第三个循环如果第二个链表不空,将后续链表接入新链表

技巧点:这里没有头结点,在接入新链表时有点麻烦,这里设置一个dummy node来解决。

其他

参考数据结构书上的代码,P26.

链接

    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if (!l1 && !l2)    //如果两个链表为空
            return NULL;    //返回空
        ListNode* l3 = new ListNode(0);    //初始化新链表指针
        ListNode* head = l3;    //生成dummy结点
        while(l1 && l2)    //如果两个链表都不空
        {
            if (l1 -> val < l2 -> val) //判断当前值大小
            {
                l3 -> next = l1;    //接入第一个链表结点
                l1 = l1 -> next;
            }
            else
            {
                l3 -> next = l2;    //接入第二个链表结点
                l2 = l2 -> next; 
            }
            l3 = l3 -> next;    //后移新链表结点
        }
        if(l1)    //链表1不空
        {
            l3 -> next = l1;    //接入链表1
        }
        if(l2)    //链表2不空
        {
            l3 -> next = l2;    //接入链表2
        }
        return head->next;    //返回时,丢弃dummy结点
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值