合并两个有序链表

合并两个有序链表
        将两个升序链表合并为一个新的  升序  链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

        示例:
                输入:1->2->4,  1->3->4
                输出:1->1->2->3->4->4

自我解答:
        这个就和归并排序的并一样,可以使用双指针解决

def merge_two_lists(l1: ListNode, l2: ListNode) -> ListNode:
    if not l1: return l2
    if not l2: return l1
    if l1.val <= l2.val:
        new_l3 = l1
        l1 = l1.next
    else:
        new_l3 = l2
        l2 = l2.next
    new_p = new_l3
    while l1 and l2:
        if l1.val <= l2.val:
            new_p.next = l1
            l1 = l1.next
        else:
            new_p.next = l2
            l2 = l2.next
        new_p = new_p.next
    new_p.next = l1 if l1 else l2
    return new_l3

力扣解答:
        还可以用递归的方式,一开始没想到。因为对比两个节点,能够找到更小的那个,但是如何能拿到上一个呢?
        在递归函数里明显是没有上一个。但是上一层递归里有,如果能把这层的较小值return到上一层递归中,
        就能解决了,这和”反转单链表“的递归思路一致,需要上层结点参与的操作,可以直接在上层处理,
        直接递归到最深处,自下而上处理。
        

def merge_two_lists_recursion(l1: ListNode, l2: ListNode) -> ListNode:
    if not l2: return l1
    if not l1: return l2
    if l1.val < l2.val:
        l1.next = merge_two_lists_recursion(l1.next, l2)
        return l1
    else:
        l2.next = merge_two_lists_recursion(l1, l2.next)
        return l2

原题链接:https://leetcode-cn.com/problems/merge-two-sorted-lists