輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,固然咱們須要合成後的鏈表知足單調不減規則。

//遞歸版 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

相關文章
相關標籤/搜索