剑指offer - 合并两个排序链表

题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
在这里插入图片描述
思路:
从两个链表的第一个节点开始,逐个对比两个链表节点的大小,把相对小的那个节点(非递归的方法用“尾插法”)插入合并链表 mergeLink
当其中有一个链表数据全部插完,而另一个链表中还有数据时,直接把还有数据的链表“接”到合并链表后面mergeLink

1.非递归的代码

// 非递归
	public static ListNode Merge2(ListNode link1,ListNode link2){
		ListNode mergeLink = new ListNode(0);
		ListNode temp = mergeLink;
		ListNode s = mergeLink;
		while(link1 != null && link2 != null){
			if(link1.val < link2.val){
 				s = new ListNode(link1.val);
				link1 = link1.next;
			}else{
 				s = new ListNode(link2.val);
				link2 = link2.next;
			}
			temp.next = s; // 尾插法 插入链表
			temp = s;    // 尾指针指向新的尾表节点
		}
		if(link1 != null){
			temp.next = link1;
		}
		if(link2 != null){
			temp.next = link2;
		}
		return mergeLink.next;
	}

2.递归的代码

// 递归
	public static ListNode Merge(ListNode link1,ListNode link2){
		if(link1 == null){
			return link2;
		}else if(link2 == null){
			return link1;
		}
		ListNode mergeLink = null;
		if(link1.val < link2.val){
			mergeLink = link1;
			mergeLink.next = Merge(link1.next,link2);
		}else{
			mergeLink = link2;
			mergeLink.next = Merge(link1,link2.next);			
		}
		
		return mergeLink;
	}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值