1. 程式人生 > >輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。

輸入兩個單調遞增的連結串列,輸出兩個連結串列合成後的連結串列,當然我們需要合成後的連結串列滿足單調不減規則。

//遞迴版 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;