题解 | #合并有序链表#

合并有序链表

http://www.nowcoder.com/practice/a479a3f0c4554867b35356e0d57cf03d

NC33* 合并有序链表

题意分析:

将两个有序的链表合并

题解一:

我们新建4个指针,dummy用于返回最后结果,p用于遍历链表1,q用于遍历链表2,r用于指示生成的新链表末端。

举个如下例子:

图片说明

  1. 开始拿指针p与指针q比较,指针p所指元素比较小,那么将r->next = p,p = p->next,r = r->next,r->next = NULL。链表变化如下:

图片说明

  1. 重复步骤1,拿指针p与指针q比较,指针q所指元素比较小,那么将r->next=q,q = q->next,r = r->next,r->next = NULL。链表变化如下

    图片说明

  2. 重复以上步骤,直到p为空或者q为空,把不为空的链表追加到指针r之后。

代码实现如下

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* dummy = new ListNode(-1);
        ListNode* r = dummy;
        while (l1&&l2){
                          //当l1和l2均不为空,合并
            if (l1->val < l2->val) {
                r->next = l1;
                l1 = l1->next;
                r = r->next;
                r->next = NULL;
            }
            else {
                r->next = l2;
                l2 = l2->next;
                r = r->next;
                r->next = NULL;
            }
        }
              //在合并结束后,吧没有合并的部分追加到r之后
        if (l1)
            r->next = l1;

        if (l2)
            r->next = l2;
        return dummy->next;
    }

时间复杂度:,m,分别为两个链表的长度

空间复杂度:

全部评论

相关推荐

05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务