将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
 
 输入:l1 = [1,2,4], l2 = [1,3,4]
 输出:[1,1,2,3,4,4]
 示例 2:
输入:l1 = [], l2 = []
 输出:[]
 示例 3:
输入:l1 = [], l2 = [0]
 输出:[0]
提示:
两个链表的节点数目范围是 [0, 50]
 -100 <= Node.val <= 100
 l1 和 l2 均按 非递减顺序 排列
第一种:
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
    ListNode prehead = new ListNode(0);  // 创建一个虚拟头节点
    ListNode pre = prehead;  // 用来记录当前节点的前一个节点
    // 当两个链表都不为空时进行循环比较
    while (list1 != null && list2 != null) {
        if (list1.val <= list2.val) {  // 如果list1的值小于等于list2的值
            pre.next = list1;  // 将pre的下一个节点指向list1
            list1 = list1.next;  // 将list1指向下一个节点
        } else {  // 如果list2的值小于list1的值
            pre.next = list2;  // 将pre的下一个节点指向list2
            list2 = list2.next;  // 将list2指向下一个节点
        }
        pre = pre.next;  // 将pre指向当前节点
    }
    // 将剩余未比较的链表部分连接到合并后的链表的尾部
    pre.next = list1 == null ? list2 : list1;
    return prehead.next;  // 返回合并后的链表的头节点
}
 
第二种:递归
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
  //如果list1为空,则返回 list2。
   if(list1==null)
    return list2;
    //如果 list2 为空,则返回list1。
    if(list2==null)
    return list1;
//如果list1的值小于等于list2的值,则将 list1.next 指向递归调用 mergeTwoLists(list1.next, list2)的结果,并返回 list1
    if(list1.val <= list2.val){
        list1.next = mergeTwoLists(list1.next,list2);
        return list1;
    }else{
        list2.next = mergeTwoLists(list1,list2.next);
        return list2;
    }
  }  
                


















