題目描述
輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。
解題思路一
采用歸并排序的歸并
public ListNode Merge1(ListNode list1, ListNode list2) {
ListNode resultList = new ListNode(0);//存放結(jié)果集
ListNode lastNode = resultList;//記錄結(jié)果集的尾指針
//歸并,每次取最小值進(jìn)行歸并
while (list1 != null && list2 != null) {
if (list1.val <= list2.val) {
lastNode.next = list1;
lastNode = list1;
list1 = list1.next;
} else {
lastNode.next = list2;
lastNode = list2;
list2 = list2.next;
}
}
//將剩下的鏈表部分直接插入結(jié)果集
if (list1 != null) {
lastNode.next = list1;
}
if (list2 != null) {
lastNode.next = list2;
}
return resultList.next;
}
解題思路二
遞歸式
public ListNode Merge2(ListNode list1, ListNode list2) {
if (list1 == null && list2 == null) {
return null;
} else if (list1 != null && list2 == null) {
return list1;
} else if (list2 != null && list1 == null) {
return list2;
} else {
ListNode resultList = new ListNode(0);//存放結(jié)果集
//找出當(dāng)前兩個(gè)鏈表最小值
if (list1.val <= list2.val) {
resultList.val = list1.val;
resultList.next = Merge2(list1.next, list2);
} else {
resultList.val = list2.val;
resultList.next = Merge2(list1, list2.next);
}
return resultList;
}
}