递归的写法真的很优雅...

进阶:在两个原链表上进行操作,非递归
// 看图时,先看代码
图解

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;
    }
}