栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

图解LeetCode21:合并两个有序链表(递归法)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图解LeetCode21:合并两个有序链表(递归法)

LeetCode21:合并两个有序链表

一、解题思路

该题能有两种解题思路

1、思路1

可以模拟两个数组的合并,就是归并排序,比较第一个的大小,将小的放到结果链表中,然后接着比较,直到两个链表全部比较结束

如果有一个链表为空,就直接把另一个链表的剩余元素全部加到结果链表中即可,然后退出循环,具体步骤如图所示

2、思路2

第二种解法其实主要的实现方式和上述的也一样,只不过是实现的方式不一致,第一种方法需要新开辟一个空间,用于存放结果。

其实在每步骤的操作都是一样的,将首位相比较,小的链接到下一个元素上,所以就可以采用递归的方法,具体如图所示

二、代码实现 1、方法1
public ListNode mergeTwoLists2(ListNode list1, ListNode list2) {
    ListNode list3 = new ListNode();
    ListNode ptr1 = list1;
    ListNode ptr2 = list2;
    ListNode ptr3 = list3;
    while(true) {
        if (ptr1.next == null) {
            ptr3.next = ptr2;
            break;
        }

        if (ptr2.next == null) {
            ptr3.next = ptr2;
            break;
        }

        if (list1.val < list2.val) {
            ptr3.next = ptr1;
            ptr3 = ptr3.next;
            ptr1 = ptr1.next;
        } else {
            ptr3.next = ptr2;
            ptr3 = ptr3.next;
            ptr2 = ptr2.next;
        }
    }
    return list3;
}
2、方法2
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    if (l1 == null) {
        return l2;
    } else if (l2 == null) {
        return l1;
    } else if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    } else {
        l2.next = mergeTwoLists(l1, l2.next);
        return l2;
    }
}
三、运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703573.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号