題目:
輸入兩個遞增排序的鏈表,合并這兩個鏈表并使鏈表中的結(jié)點仍然是按照遞增排序的。
思路:
假若有l(wèi)ist1:{1,3,5}
list2:{2,4,6}
1)先比較1和2,明顯是1小。所以list1的1結(jié)點為合并鏈表的頭結(jié)點。合并鏈表為{1}
2)接下來比較list1:{3,5} 和 list2:{2,4,6}鏈表,明顯2比3小,將2加入到合并的鏈表,所以合并后的鏈表為{1,2}。
3)重復(fù)類似2)的步驟,即每次從兩個鏈表中選出val較小的結(jié)點,并拼接到合并鏈表。
此處使用遞歸代碼更加精簡
- 注:考慮鏈表為空的特殊情況!
實現(xiàn):
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if (list1 == null){
return list2;
} else if (list2 == null){
return list1;
}
ListNode pMergeHead = null;
if (list1.val <= list2.val) {
pMergeHead = list1;
pMergeHead.next = Merge(list1.next, list2);
} else {
pMergeHead = list2;
pMergeHead.next = Merge(list1, list2.next);
}
return pMergeHead;
}
}