链表—合并两个有序链表

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

示例:

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

思路

代码的思路很明确,入参就是两个链表中需要比较的结点,如果说传入的某一个结点为空,则直接返回另一个入参结点即可,如果说传入的结点均不为空,则比较两个结点所带的数据的大小,将较小的结点返回,同时要注意到,代码中用到了递归,这点比较好理解,因为对于我们需要合并的某一个结点来说,完成一次合并后,其下一个结点,自然也能用相同的方法来找到,这样就找到了递归开始的条件,作为一个递归算法,还需要找到递归结束的条件,代码一开始的判断,如果说有一个入参为空,这说明已经到链表末尾,如果说两个入参均为空,这说明已经遍历完两个链表,整个递归结束,合并完成。

代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }
        
        ListNode resultNode = null;
        if (l1.val < l2.val) {
            resultNode = l1;
            resultNode.next = mergeTwoLists(l1.next, l2);
        } else {
            resultNode = l2;
            resultNode.next = mergeTwoLists(l1, l2.next);
        }
        
        
        return resultNode;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容