递归的写法真的很优雅...
进阶:在两个原链表上进行操作,非递归
// 看图时,先看代码
public class Solution {
public ListNode Merge(ListNode list1, ListNode list2) {
if (list1 == null) { // 特判
return list2;
} else if (list2 == null) {
return list1;
}
ListNode list = null; // 使list1指向头结点为最小值的链表,list1也是最终要返回的链表
if (list1.val > list2.val) {
list = list1;
list1 = list2;
list2 = list;
}
list = list1;
while (list1.next != null && list2 != null) { // list1.next!=null 很巧妙,而不是list1!=null
if (list1.next.val <= list2.val) {
list1 = list1.next;
} else {
// 图解12345
ListNode nex = list1.next; // 1
list1.next = list2; // 2
list2 = list2.next; // 3
list1 = list1.next; // 4
list1.next = nex; // 5
}
}
if (list2 != null) { // 最后只关心list2不为空
list1.next = list2;
}
return list;
}
}
京公网安备 11010502036488号