这次用的方法是将list2链表中的数据和list1中的数据比较大小后插入进去
不过内存依旧是大,就是执行用时短了
class Solution {
public ListNode mergeTwoLists(ListNode list1,ListNode list2) {
if (list1 == null && list2 == null) {
return list1;
} else if (list1 != null && list2 == null) {
return list1;
} else if (list2 != null && list1 == null){
return list2;
}
// 这里是为了使list1第一个数据比list2中的第二个数据小,这样才能方便下边while循环里边比较
if (list1.val > list2.val) {
ListNode temp = list1;
list1 =list2;
list2 = temp;
}
// 定义一个指针,用来记录应该插入的位置
ListNode list = list1;
while (list.next != null && list2 != null) {
// 此处判断的是如果list2中的这个数据比list当前的这个数据大并且小于list后边的数据,
// 就表示list2这个数据在这个位置合适
if (list.val <= list2.val && list.next.val > list2.val) {
// 定义一个数据,存储当前的list2的数值,并且指向list后边的数据
ListNode data = new ListNode(list2.val, list.next);
// 在此处拼接上
list.next = data;
// 然后两个链表共同向后移动一位
list = list.next;
list2 = list2.next;
} else {
// 如果不符合条件就向后移动一位进行比较
list = list.next;
}
}
// 这里是如果list指向的不是list1的尾部,就需要继续向后移动,一直移动到尾部,这样如果list2里边的剩余的数据才能放在最后
while (list.next != null) {
list = list.next;
}
list.next = list2;
return list1;
}
}