题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
链表节点
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
1.非递归
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null) //list1空
return list2;
if(list2 == null) //list2空
return list1;
ListNode newList = new ListNode(0); //新建一个虚拟的头结点(方便尾插法插入)
ListNode p = newList; //p为链尾节点
while(list1 != null && list2 != null){
if(list1.val < list2.val){
p.next = list1;
list1 = list1.next;
}
else{
p.next = list2;
list2 = list2.next;
}
p = p.next;
p.next = null;
}
if(list1 == null) //list1空将list2接到新链表后
p.next = list2;
if(list2 == null) //list2空将list1接到新链表后
p.next = list1;
return newList.next; //记得去掉虚拟的头结点
}
}
2.递归
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
//递归出口:当任一list为空时
if(list1 == null)
return list2;
if(list2 == null)
return list1;
ListNode newList = null;
if(list1.val < list2.val){
newList = list1;
newList.next = Merge(list1.next, list2); //递归合并list1.next,list2
}
else{
newList = list2;
newList.next = Merge(list1, list2.next); //递归合并list1,list2.next
}
return newList;
}
}