递归的写法真的很优雅...
进阶:在两个原链表上进行操作,非递归
// 看图时,先看代码
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; } }