import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
* 此题不考虑l1 是正序 l2 是倒序的情况 如果考虑就把两个链表所有数据到拿出来放到集合排序
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
//先比较两个链表头部 较为小的作为新表头 有序即可 正序 倒序都可以
ListNode head = null;
if(l1.val <= l2.val){
head = l1;
l1 = l1.next;
} else {
head = l2;
l2 = l2.next;
}
ListNode tail = head;
//之后比较两个链表的下个节点 不断把小的拼接上
while(l1 != null && l2 != null){
if(l1.val <= l2.val){
tail.next = l1;
l1 = l1.next;
} else {
tail.next = l2;
l2 = l2.next;
}
tail = tail.next;
}
if(l1 == null){
tail.next = l2;
}
if(l2 == null){
tail.next = l1;
}
return head;
}
}