//递归版 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