思路一:将大的链表 list1 合并到小的链表 list2 中,首先我们设置两个指针分别指向 list1 和 list2 中的第一个元素,然后我们在 list2 中找到最后一个比 list1 指针指向的数值小的位置,然后将 list1 指向的节点插入到 list2 中,直到 list1 或者 list2 为空即可。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null) return list2;
if(list2 == null) return list1;
ListNode ans;
if(list2.val > list1.val) {
ans = list1;
list1 = list2;
list2 = ans;
}
ans = list2;
while(list2.next != null && list1 != null) {
if(list2.next.val < list1.val) { //找到最后一个比list1小的数
list2 = list2.next;
} else { //将list2中的节点插入到list1中
ListNode node = list1;
list1 = list1.next;
node.next = list2.next;
list2.next = node;
list2 = list2.next;
}
}
if(list2.next == null) { //如果list2中找不到最后一个比list1小的数,那么将list1整个插入list2中
list2.next = list1;
}
return ans;
}
} 思路二:设置头结点,建立新的链表 newList,我们一次遍历两个链表,如果list1.val < list2.val,那么将 list1 插入到新的链表中,list1 指针后移,否则新链表中插入 list2,list2指针后移。最后查看哪一个链表还没有被完全插入新链表中将其插入,最后返回即可。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null) return list2;
if(list2 == null) return list1;
ListNode ans = new ListNode(-1), node = ans;
while(list1 != null && list2 != null) {
ListNode node1 = list2.val <= list1.val ? list2 : list1;
node.next = node1;
if(list2.val <= list1.val) {
list2 = list2.next;
} else {
list1 = list1.next;
}
node = node.next;
}
node.next = list1 != null ? list1 : list2;
return ans.next;
}
} 思路三:递归,我们可以这样思考,如果某一个链表为空,我们必定返回另外一个链表。否则,当list1.val <= list2.val时,就相当于list1作为头结点,然后list1.next和list2继续进行有序链表的合并,当list2.val <= list1.val时,相当于list2.val作为头结点,然后list2.next和list1继续进行有序链表的合并,那么按照这样的思路我们就可以写出相应的递归代码。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null) return list2;
if(list2 == null) return list1;
if(list1.val <= list2.val) {
list1.next = Merge(list1.next, list2); //list1.next和list2合并
return list1;
} else {
list2.next = Merge(list1, list2.next);//list2.next和list1合并
return list2;
}
}
} 
京公网安备 11010502036488号