题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
 

 

思路:

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;
	}