//遞歸版 public class Solution {code
public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null) return list2; else if(list2==null) return list1; ListNode list3=null; //誰小就把誰的鏈表賦值給list3; if(list1.val>list2.val){ list3=list2; //list.next就在去掉鏈表一個節點後的兩個鏈表再找 list3.next = Merge(list1,list2.next); }else{ list3=list1; list3.next=Merge(list1.next,list2); } return list3; }
}遞歸
//非遞歸版io
public class Solution {class
public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null) return list2; else if(list2==null) return list1; //head的目的先給個節點,避免以後null的判斷 ListNode head=new ListNode(-1); ListNode current=head; while(list1!=null&&list2!=null){ //誰小就把誰放到current.next if(list1.val>=list2.val){ current.next=list2; list2=list2.next; } else{ current.next=list1; list1=list1.next; } //一次完成後,更新current當前節點 current =current.next; } //作下面的操做是由於,有可能有退出while後,list1或list2不爲空,有一部分沒有放到新的節點上 if(list1!=null) current.next=list1; if(list2!=null) current.next=list2; //返回head.next由於以前有一個建立了一個節點的值爲-1,因此要rerun head.next return head.next; }
}List