合并两个排序的链表

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

 

思路:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值