题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路一
采用归并排序的归并
public ListNode Merge1(ListNode list1, ListNode list2) {
ListNode resultList = new ListNode(0);//存放结果集
ListNode lastNode = resultList;//记录结果集的尾指针
//归并,每次取最小值进行归并
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;
}
}
//将剩下的链表部分直接插入结果集
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);//存放结果集
//找出当前两个链表最小值
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;
}
}