本题两种解法:
- 暴力的解法:
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.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; }