算法问题:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
输入 {1,3,5},{2,4,6}
输出{1,2,3,4,5,6}
//链表的结构
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
非递归版本的实现
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode newHead = new ListNode(-1);
ListNode result = newHead;//按我的理解,这样做的目的是使用两个引用同时指向同一块内存,然后对一个引用操作,
//另一个引用也就跟着变了,并且这另一个引用指向的是head的,所以后面方法的返回值的就是newHead.next
while(list1!=null&&list2!=null){
//对链表的数据进行判断,较小的作为第一个节点,加入到result当中。
if(list1.val<=list2.val){
//把result连接到list1
result.next = list1;
list1 = list1.next;
}
else{
//把result连接到list2
result.next=list2;
list2 = list2.next;
}
result=result.next;
}
//因为链表的长短可能不一样,所以要两个if判断,如果list1更长,那么就把剩下的list部分
//用result接起来,list2同理
if(list1!=null){
//list1更长
result.next = list1;
}else if(list2!=null){
//list2更长
result.next = list2;
}
return newHead.next;
}
}
递归版本的实现
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
ListNode node = null;
if(list1.val<list2.val){
node=list1;
node.next = Merge(list1.next,list2);
}
else{
node=list2;
node.next = Merge(list1,list2.next);
}
return node;
}