题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
方法一(递归)
合并过程中,首先比较两个链表的首节点哪个小,较小的节点作为合成链表的首节点,之后将指针指向较小节点的后一个节点,再次进行上面逻辑的比较,可以发现比较过程是一个递归的操作。
public static ListNode merge(ListNode list1, ListNode list2){
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
//1 3 5 7
// 2 4 6 8
if(list1.val<list2.val){
list1.next=merge(list1.next,list2);
return list1;
}else {
list2.next=merge(list1,list2.next);
return list2;
}
}
这个递归代码简单,但是逻辑思索还是比较繁琐的,在于后面那个判断为什么返回list1和list2
想象成拆毛衣,要一直拽着一根线
方法二:
非递归实现:非递归实现比较容易想到,直接进行分情况讨论即可,要稍微注意下后面代码中头结点的赋值过程。
package com.helan.c;
import java.util.List;
publi