題目描述:
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規則。
解題思路:
首先需要判斷幾個特殊情況,即判斷輸入的兩個指針是否為空。如果第一個鏈表為空,則直接返回第二個鏈表;如果第二個鏈表為空,則直接返回第一個鏈表。如果兩個鏈表都是空鏈表,合並的結果是得到一個空鏈表。
兩個鏈表都是排序好的,我們只需要從頭遍歷鏈表,判斷當前指針,哪個鏈表中的值小,即賦給合並鏈表指針,剩余的結點仍然是排序的,所以合並的步驟和之前是一樣的,所以這是典型的遞歸過程,用遞歸可以輕松實現。
舉例:

編程實現(Java):
//方法一:遞歸實現
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null)
return list2;
if(list2==null)
return list1;
ListNode head=null; //頭節點
if(list1.val<=list2.val){
head=list1;
head.next=Merge(list1.next,list2);
}else{
head=list2;
head.next=Merge(list1,list2.next);
}
return head;
}
//方法二:非遞歸實現
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null)
return list2;
if(list2==null)
return list1;
ListNode head=new ListNode(-1);//頭節點
ListNode thehead=head;
while(list1!=null && list2!=null){
if(list1.val<=list2.val){
thehead.next=list1;
list1=list1.next;
}else{
thehead.next=list2;
list2=list2.next;
}
thehead=thehead.next;
}
if(list1!=null) //歸並完需要檢查哪個鏈表還有剩余
thehead.next=list1;
if(list2!=null)
thehead.next=list2;
return head.next;
}