LeetCode21. 合并两个有序链表

LeetCode21. 合并两个有序链表

题目描述

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

思路分析

  1. 合并两条有序链表可以考虑使用递归的思路
  2. 递归,即函数自己调用自己,不过在每次调用过程中,参数都要发生变化,向递归结束的条件逼近,不然会形成死循环
  3. 此题目递归递归结束的条件为两条链表任意一个为空
  4. 采用先找最小头节点的方法,那个头节点小,则把这个头节点放到合并后链表的最前方,形成递归
  5. 注意递归每次执行完都要有返回

源码及解析

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        //递归解法
        //递归结束的条件,即两个链表任意一个为空
        if (l1 == null){
            return l2;
        }else if (l2 == null){
            return l1;
            //如果L1的头节点的值小于L2的头节点的值,则将L1的头节点放到两条合并链表的最前边
        }else if (l1.val < l2.val){
            l1.next = mergeTwoLists(l1.next,l2);
            return l1;
        }else {
            //如果L2的头节点的值小于等于L1的头节点的值,则将L2的头节点放到两条合并链表的最前边
            l2.next = mergeTwoLists(l2.next,l1);
            return l2;
        }
    }
posted @ 2021-05-10 09:46  mx_info  阅读(37)  评论(0)    收藏  举报