165. 合并两个排序链表

将两个排序链表合并为一个新的排序链表.
样例
给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。

双指针

这个和合并两个排序数组是一样的,两个指针就行了,只是不像vector那样简单赋值就可以了,而是要通过变换指针来连接起来,思路就是新建一个链表,通过双指针每次分离出来一个节点,把这个节点链接到新链表的后面,当一个链表遍历完之后,只需把另外一个链表剩下的整个链接到新链表的后面就行了,写起来也是不难,像链表的这种遍历和拆解都应该形成自己的一套固定的写法,会简单许多。

ListNode * mergeTwoLists(ListNode * l1, ListNode * l2) {
        if(!l1)
            return l2;
        if(!l2)
            return l1;
        
        
        ListNode *newhead=new ListNode(0);
        ListNode *newhead_back;
        ListNode *head1=l1;
        ListNode *head2=l2;
        ListNode *tmp1;
        ListNode *tmp2;
        
        while((head1!=NULL)&&(head2!=NULL))   //两个都不空,才进while循环
        {
            tmp1=head1;
            tmp2=head2;
            
            //tmp1->next=NULL;
            //tmp2->next=NULL;
            
            if(tmp1->val<tmp2->val)
            {
                
                head1=head1->next;
                tmp1->next=NULL;
                if(!newhead->next)
                {
                    newhead->next=tmp1;
                    newhead_back=newhead->next;
                }
                else
                {
                newhead_back->next=tmp1;
                newhead_back=newhead_back->next;
                }
                
            }
            else 
            {
                
                head2=head2->next;
                tmp2->next=NULL;
                if(!newhead->next)
                {
                    newhead->next=tmp2;
                    newhead_back=newhead->next;
                }
                else
                {
                newhead_back->next=tmp2;
                newhead_back=newhead_back->next;
                }
                
            }
        }
        
        if(head1)     //如果head1不空,把其连接到后面
        {
            newhead_back->next=head1;
            return newhead->next;
        }
        if(head2)     //如果head2不空,把其连接到后面
        {
            newhead_back->next=head2;
            return newhead->next;
        }
        
        return newhead->next;
        // write your code here
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 描述 两个排序链表合并为一个新的排序链表 样例 给出 1->3->8->11->15->null,2->null,...
    6默默Welsh阅读 1,850评论 0 0
  • 思路两个链表都没到null的时候,要比较哪个被拆下来放到新链表中。head从l1,l2比较小的中找。然后就把那个链...
    jose_dl阅读 1,427评论 0 0
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,637评论 0 12
  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 5,447评论 0 6
  • 你也曾经有过梦想吧,你也曾经想过要努力吧,可后来呢? 初三那年,第一次深刻理解了努力的含义,周围的...
    蚀年阅读 4,583评论 14 10

友情链接更多精彩内容