题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
1.递归的推出条件就是一个链表已经走到了头 每次在两个链表中找小的点 再对剩下递归
// 递归
public ListNode Merge(ListNode list1, ListNode list2) {
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;
}
}
2.非递归 两个链表对照比较 并且后移判断
// 非递归
public ListNode Merge2(ListNode list1, ListNode list2) {
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
ListNode mergeHead = null;
ListNode cur = null;
while (list1 != null && list2 != null) {
if (list1.val <= list2.val) { //第一个比较小
if (mergeHead == null) { //判断头是否空情况
mergeHead = cur = list1;
} else {
cur.next = list1;
cur = cur.next;
}
list1=list1.next; //第一个比较小 所以来到它的下一个位置
}else { //第二个比较小
if (mergeHead == null) { //判断头是否空情况
mergeHead = cur = list2;
} else {
cur.next = list2;
cur = cur.next;
}
list2=list2.next; //第二个比较小 所以来到它的下一个位置
}
}
//把剩余的串起来
if(list1 == null){ //链表1完了 把链表2连起来
cur.next = list2;
}else{ //链表2完了 把链表1连起来
cur.next = list1;
}
return mergeHead;
}