import java.util.*;
/*
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
示例1
输入
{1,3,5},{2,4,6}
返回值
{1,2,3,4,5,6}
1. 暴力法
*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null&&list2==null){
return null;
}else if(list1==null&&list2!=null){
return list2;
}else if(list2==null&&list1!=null){
return list1;
}
ArrayList<ListNode> arr = new ArrayList<>();
while(list1!=null){
arr.add(list1);
list1 = list1.next;
}
while(list2!=null){
arr.add(list2);
list2= list2.next;
}
Collections.sort(arr,(node1,node2)->node1.val-node2.val);
ListNode head = null;
ListNode node = null;
for(ListNode n:arr){
if(head == null){
head = n;
node = head;
}else{
head.next = n;
head = head.next;
}
}
return node;
}
}
//2.迭代法 创建一个头指针
import java.util.*;
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null&&list2==null){
return null;
}else if(list1==null&&list2!=null){
return list2;
}else if(list2==null&&list1!=null){
return list1;
}
ListNode vHead = new ListNode(-1);//这一步很关键
ListNode cur = vHead;
while(list1!=null&&list2!=null){
if(list1.val<=list2.val){
cur.next = list1;
cur = cur.next;
list1 = list1.next;
}else{
cur.next = list2;
cur = cur.next;
list2 = list2.next;
}
}
if(list1==null){
cur.next = list2;
}else{
cur.next = list1;
}
return vHead.next;
}
}
//3.递归方法
import java.util.*;
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(list2.next,list1);
return list2;
}
}
}