题目
代码分析
首先不要考虑特殊情况,分析中间的情况,被插入的需要一个前面的指针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次