本题两种解法:

  1. 暴力的解法:
    1.1 遍历 list1 和 list2,然后用 List 接收其中的数值,然后转为数组,然后排序,然后又转回链表。
    1.2 其时间复杂度和空间复杂度都较大,只是为了解题解题。
    代码如下:
    ```
    public ListNode Merge(ListNode list1,ListNode list2) {
     if (list1 == null) return list2;
     if (list2 == null) return list1;
     if (list1 == null && list2 == null) return null;
     List<Integer> list = new ArrayList<>();
     while (list1 != null) {
         list.add(list1.val);
         list1 = list1.next;
     }
     while (list2 != null) {
         list.add(list2.val);
         list2 = list2.next;
     }
     Integer[] array = new Integer[list.size()];
     list.toArray(array);
     Arrays.sort(array);
     ListNode node = new ListNode(0);
     ListNode begin = node;
     ListNode node2;
     for (int i = 0; i < array.length; i ++) {
         node2 = new ListNode(array[i]);
         node.next = node2;
         node = node.next;
     }
     return begin.next;
    }
  2. 依次比较大小进行排序
    2.1 创建链表(其实可以不用创建,直接比较然后指向就行),然后比较 list1 和 list2,指向较小的那个就行。
    代码如下:
     public ListNode Merge(ListNode list1,ListNode list2) {
         if (list1 == null) return list2;
         if (list2 == null) return list1;
         if (list1 == null && list2 == null) return null;
         ListNode li1 = list1;
         ListNode li2 = list2;
         ListNode node = new ListNode(0);
         ListNode begin = node;
         while (li1 != null && li2 != null) {
             if (li1.val > li2.val) {
                 node.next = li2;
                 li2 = li2.next;
                 node = node.next;
             } else {
                 node.next = li1;
                 li1 = li1.next;
                 node = node.next;
             }
         }
         if (li1 == null && li2 != null) node.next = li2;
         if (li2 == null && li1 != null) node.next = li1;
         return begin.next;
     }