输入两个单调递增的链表,输出两个链表合成后的链表,固然咱们须要合成后的链表知足单调不减规则。

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

相关文章
相关标签/搜索