《劍指offer》-合成兩個單鏈表

/*
 * 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
 * 思路:
 * 魯棒性:如果list爲空,返回list2;如果list2爲空,返回list1;如果兩者都爲空,返回空
 * 比較list1.val和list2.val的頭節點,假設頭節點是list1
 * 比較list1.next.val和list2.val的值,較小的那個值作爲list1下一個節點(保證遞增性)
 */
public class MergeList {
	public ListNode merge(ListNode list1, ListNode list2) {
		if(list1 == null && list2 == null)
        	return null;
		
        if(list1 == null)
        	return list2;
        
        if(list2 == null)
        	return list1;
        
        if(list1.val <= list2.val) {	//頭節點是list1
        	list1.next = merge(list1.next, list2);
        	return list1;
        }
        else {
        	list2.next = merge(list1, list2.next);
        	return list2;
        }
           
    }

	public static void main(String[] args) {
		ListNode node = new ListNode(1);
		node.next = new ListNode(2);
		node.next.next = new ListNode(3);
		node.next.next.next = new ListNode(4);
		node.next.next.next.next = new ListNode(5);
		
		ListNode node2 = new ListNode(4);
		node2.next = new ListNode(5);
		node2.next.next = new ListNode(6);
		
		ListNode result = new MergeList().merge(node, node2);
		while(result != null) {
			System.out.print(result.val + " ");
			result = result.next;
		}
	}
}

發佈了83 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章