题目

代码分析

首先不要考虑特殊情况,分析中间的情况,被插入的需要一个前面的指针pre,插入的指针需要一个next来保留现场,这道题就是pre和next的灵活应用。
第二种方法就是递归,交替的进入递归的方法。

代码展示

public static ListNode mergeTowList(ListNode head1,ListNode head2) {

        ListNode res=head1.value<head2.value?head1:head2;
        ListNode pre=res;
        ListNode cur1=pre.next;
        ListNode cur2=res==head1?head2:head1;
        ListNode next=null;
        while(cur1!=null&&cur2!=null)
        {
            if(cur1.value<=cur2.value)
            {
                pre=cur1;
                cur1=cur1.next;
            }
            else
            {
                next=cur2.next;
                cur2.next=cur1;
                pre.next=cur2;
                pre=cur2;
                cur2=next;
            }
        }
        if(cur1==null&&cur2!=null)
        {
            pre.next=cur2;
        }
        return res;
    }

递归的实现

public static ListNode mergeTowList2(ListNode head1,ListNode head2)
    {
        if(head1==null) return head2;
        if(head2==null) return head1;
        if(head1.value<head2.value)
        {
            head1.next=mergeTowList2(head1.next,head2);
            return head1;
        }else
        {
            head2.next=mergeTowList2(head1,head2.next);
            return head2;
        }
    }

学习情况

1次