美文网首页lintcode程序员
165. 合并两个排序链表

165. 合并两个排序链表

作者: 和蔼的zhxing | 来源:发表于2018-01-19 21:08 被阅读29次

将两个排序链表合并为一个新的排序链表.
样例
给出 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
    }

相关文章

  • LintCode 练习代码

    35.翻转链表 165. 合并两个排序链表 96. 链表划分 166. 链表倒数第n个节点 java语言一次循环定...

  • 165. 合并两个排序链表

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

  • 面试题25. 合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例: ...

  • LeetCode题解之合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1:...

  • 25:合并两个排序的链表

    题目25:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的 举例说...

  • LeetCode 每日一题 [56] 合并两个排序的链表

    LeetCode 合并两个排序的链表 [简单] 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • lintcode 165. 合并两个排序链表

    难度:容易 1. Description 2. Solution python 下面的方法比较麻烦,是把l2插入到...

  • 剑指offer之合并两个排序的列表

    合并两个排序的列表 欢迎关注作者简书csdn传送门 题目   输入两个递增排序的链表,合并这两个链表并使新链表中的...

  • 2018-12-26

    问题列表 合并两个有序链表 合并K个排序链表 合并区间 插入区间 问题与反馈 总结与收获 多个有序链表的合并,类似...

网友评论

    本文标题:165. 合并两个排序链表

    本文链接:https://www.haomeiwen.com/subject/oymaoxtx.html