问题:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
有递归和非递归两种方法;
注意非递归里面对头结点设置之后,节点要移动
/*
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;
}
}
本文介绍了一种将两个单调递增链表合并成一个单调不减链表的方法,提供了递归和非递归两种实现方式,并详细解释了非递归解法中节点处理的注意事项。

2629

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



