Java实现两个有序的链表合并

简介: Java实现两个有序的链表合并

Java实现两个有序的链表合并

先实现两个有序链表

代码如下:

        SingleLinkedList sll1 = new SingleLinkedList();
        for (int i = 0; i < 10; i += 2) {
            SingleNode node = new SingleNode(i, null);
            sll1.add(node);
        }
        System.out.println("单向链表1:" + sll1.toString());

        SingleLinkedList sll2 = new SingleLinkedList();
        for (int i = 1; i < 12; i += 2) {
            SingleNode node = new SingleNode(i, null);
            sll2.add(node);
        }
        System.out.println("单向链表2:" + sll2.toString());

输出:如下所示,跟预期一致。

    单向链表1:SingleLinkedList:[0, 2, 4, 6, 8]
    单向链表2:SingleLinkedList:[1, 3, 5, 7, 9, 11]

嵌套调用,完成两个有序链表的合并。

    public SingleNode mergeTwoLists(SingleNode l1, SingleNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }
        SingleNode mergedNode;
        if (l1.getItem() < l2.getItem()) {
            mergedNode = l1;
            mergedNode.next = mergeTwoLists(l1.next, l2);
        } else {
            mergedNode = l2;
            mergedNode.next = mergeTwoLists(l2.next, l1);
        }
        return mergedNode;
    }

下面进行测试,代码如下:

        SingleNode mergedNode = mergeTwoLists(sll1.getFirst(), sll2.getFirst());
        sll1.logFromHead("mergedNode", mergedNode);

输出结果如下:结果跟预期的一致。

    单向链表1:SingleLinkedList:[0, 2, 4, 6, 8]
    单向链表2:SingleLinkedList:[1, 3, 5, 7, 9, 11]
    mergedNode:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11]

完整代码请查看

项目中搜索SingleLinkedList即可。

github传送门 https://github.com/tinyvampirepudge/DataStructureDemo

gitee传送门 https://gitee.com/tinytongtong/DataStructureDemo

参考:

1、merge-two-sorted-lists

2、使用Java实现单向链表,并完成链表反转。

3、Java实现有环的单向链表,并判断单向链表是否有环

相关文章
|
1月前
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
48 0
Leetcode第21题(合并两个有序链表)
|
29天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
38 3
|
1月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
90 0
|
3月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
41 2
|
1月前
|
存储 Java 开发者
HashSet和TreeSet教你重新认识Java集合的无序与有序
【10月更文挑战第14天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了它们分别实现无序和有序存储的机制。通过理解HashSet基于哈希表的无序特性和TreeSet利用红黑树实现的有序性,帮助开发者更好地选择合适的集合类型以满足不同的应用场景。
17 2
|
2月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
23 3
|
3月前
|
存储 Java
|
3月前
|
算法
LeetCode第21题合并两个有序链表
该文章介绍了 LeetCode 第 21 题合并两个有序链表的解法,通过创建新链表,依次比较两个链表的头节点值,将较小的值插入新链表,直至其中一个链表遍历完,再将另一个链表剩余部分接到新链表后面,实现合并。
LeetCode第21题合并两个有序链表
|
3月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法