输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/*
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 || list2 == null)
{
if(list1 !=null)
return list1;
if(list2!=null)
return list2;
return null;
}
ListNode result = null;
if(list1.val <= list2.val){
result = list1;
result.next = Merge(list1.next,list2);
}else{
result = list2;
result.next = Merge(list1,list2.next);
}
return result;
}
}
方法二: 非递归方法
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
ListNode head = null;
ListNode last = null;
while(list1!=null && list2!=null){ //对于两个链表等长的部分进行比较
if(list1.val <= list2.val){
if(head == null){
head = last = list1; //如果list1的值较小,则head指向list1
}else{
last.next = list1; //last为合并链表的最后一个节点,每次完成一次比较,将last指向新的节点
last = last.next; //将last移到最新节点的位置
}
list1 = list1.next; //较小的链表也向后移动一个节点,较大的节点仍然在上一个位置
}else{
if(head == null){
head = last = list2; //如果list2的值较小,则head指向list2
}else{
last.next = list2; //last为合并链表的最后一个节点,每次完成一次比较,将last指向新的节点
last = last.next; //将last移到最新节点的位置}
list2 = list2.next;
}
}
if(list1 == null){ //如果一个链表比较完成,则直接指向另一个链表
last.next = list2;
}else{
last.next = list1;
}
return head;
}
}