问题:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
有递归和非递归两种方法;
注意非递归里面对头结点设置之后,节点要移动
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
/*
递归的解法
if(list1==null)
return list2;
if(list2==null)
return list1;
if(list1.val<list2.val){
list1.next=Merge(list1.next,list2);
return list1;
}
else{
list2.next=Merge(list1,list2.next);
return list2;
}
*/
//非递归解法
if(list1==null)
return list2;
if(list2==null)
return list1;
ListNode p1=list1;
ListNode p2=list2;
ListNode temp=null;
ListNode current=temp;
while(p1!=null && p2!=null){
if(p1.val<=p2.val){
if(temp==null)
temp=current=p1;
else{
current.next=p1;
current=current.next;
//p1=p1.next不能放在这里,会造成死循环
}
p1=p1.next;
}
else{
if(temp==null)
temp=current=p2;
else{
current.next=p2;
current=current.next;
//p2=p2.next不能放在这里,会造成死循环
}
p2=p2.next;
}
}
if(p1==null)
current.next=p2;
else
current.next=p1;
return temp;
}
}