輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。
阿新 • • 發佈:2019-04-19
//遞迴版 public class Solution {
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; }
}
//非遞迴版
public class Solution {
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;