题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
源代码:
一、非递归解法
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {//需要注意分四种情况:1)list2为空,2)list1为空;3)两者都为空;4)两者都不为空。
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode list3=null,pre=null;
if(list1!=null&&list2==null){
return list1;
}else if(list1==null&&list2!=null){
return list2;
}else if(list1!=null&&list2!=null){
while(list1!=null&&list2!=null){
if(list1.val<list2.val){
if(list3==null){
pre=list3=list1;
list1=list1.next;//注意这些细节
}else{
list3.next=list1;
list3=list3.next;
list1=list1.next;//注意这些细节
}
}else{//list1.val >= list2.val
if(list3==null){
pre=list3=list2;
list2=list2.next;//注意这些细节
}else{
list3.next=list2;
list3=list3.next;
list2=list2.next;//注意这些细节
}
}
}
while(list1!=null){
list3.next=list1;
list3=list3.next;
list1=list1.next;
}
while(list2!=null){
list3.next=list2;
list3=list3.next;
list2=list2.next;
}
}
return pre;
}
}
二、递归解法
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode list3=null,pre=null;
if(list1!=null&&list2==null){
return list1;
}else if(list1==null&&list2!=null){
return list2;
}else if(list1!=null&&list2!=null){
if(list1.val<list2.val){
if(list3==null){
pre=list3=list1;
}else{
list3.next=list1;
list3=list3.next;
}
list3.next = Merge(list1.next,list2);
list3 = list3.next;
}else{//list1.val >= list2.val
if(list3==null){
pre=list3=list2;
}else{
list3.next=list2;
list3=list3.next;
}
list3.next = Merge(list1,list2.next);
list3 = list3.next;
}
}
return pre;
}
}
本文介绍了一种将两个单调递增链表合并成一个保持单调不减规则的新链表的算法。提供了非递归和递归两种实现方式,详细解释了每种方法的逻辑流程和关键代码细节。
517

被折叠的 条评论
为什么被折叠?



