题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
从两个链表的第一个节点开始,逐个对比两个链表节点的大小,把相对小的那个节点(非递归的方法用“尾插法”)插入合并链表 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;
}
运行结果