合并两个有序链表(力扣第21题)

题目:

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

示例:

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

解法一:非递归,循环遍历合并

     public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

        if (l1 == null && l2 == null){
            return null;
        }
        if (l1 == null || l2 == null){
            return l1==null?l2:l1;
        }

        ListNode p = l1;
        ListNode q = l2;
        ListNode temp = new ListNode(0);
        ListNode pp = temp;
        while (p != null && q != null){
            
            if (p.val <= q.val){
                pp.next = p;
                p = p.next;
            }else {
                pp.next = q;
                q = q.next;
            }
            pp = pp.next;
        }
        
        pp.next = (p!=null)?p:q;
        return temp.next;
    }

解法二:递归,参考自cyc2018

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

       if (l1 == null) return l2;
    if (l2 == null) return l1;
    if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    } else {
        l2.next = mergeTwoLists(l1, l2.next);
        return l2;
    }
    }
原文地址:https://www.cnblogs.com/yxym2016/p/13431905.html