题解 | #合并两个排序的链表#

合并两个排序的链表

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

采用插入法:首先找出两个链表哪个作为返回链表的表头(节点值较小的那个),然后设置一个前驱pre,根据值的大小比较进行合适的位置插入即可。这个方法记录了每次插入的前驱,每次进行插入时无需遍历链表,因此时间复杂度为O(n)

    public ListNode Merge(ListNode list1,ListNode list2) {
        if(list1==null)return list2;
        if(list2==null)return list1;
        ListNode head1,p;
        ListNode head2,q;
        if(list1.val>list2.val){
              head1= list2;p = list2;
              head2= list1;q = list1;
        }
        else{
              head1= list1;p = list1;
              head2= list2;q = list2;
        }
        ListNode pre=null;
        while(p!=null&&q!=null){
             if(p.val<=q.val){
                  pre = p;
                  p=p.next;
             }
            else {
               head2 = head2.next;
                q.next=p;
                pre.next=q;
                pre=q;
                q=head2;
            } 
        }
        if(q!=null){
            pre.next=q;
        }
        return head1;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 12:20
点赞 评论 收藏
分享
07-09 18:28
门头沟学院 Java
写着提前批,结果还要实习4个月以上???
程序员牛肉:这种不用看,直接投了,面试的时候问对应的HR就行。有可能他们是直接复制的暑期实习的模板。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:00
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

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