LeetCode:21. 合并两个有序链表

简介

题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/description/

解决方式:链表 + 双指针/递归

这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!

推荐查看腐烂的橘子、Krahets大佬所作题解。

双指针

解题思路:双指针。list1、list2就相当于两个指针,分别指向链表的第一个元素。此题不在原本的两个链表中进行修改,而是直接创建第三个链表。双指针指向的元素哪个小就先加入第三个链表。值得注意的是,第三个链表的头节点不能动,否则就会丢失节点,所以才有了 pre 指针往后移动。

java 复制代码
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        // 初始化第三方链表。链表头不能动,移动 pre 连接后面的节点
        ListNode list3 = new ListNode(0), pre = list3;
        // 迭代,当双方都不为 null 时
        while(list1 != null && list2 != null){
            if(list1.val >= list2.val){
                // 链表1的元素比链表2的大或相等,将链表2的元素移动到链表3
                pre.next = list2;
                list2 = list2.next;
            }else{
                // 反之,将链表1的元素移动到链表3
                pre.next = list1;
                list1 = list1.next;
            }
            // 移动到最后一个元素
            pre = pre.next;
        }
        // 有一个链表元素已经迭代完,则将剩下的另一个链表的元素全部移动到链表3
        pre.next = list1 != null ? list1 : list2;
        // 返回数据。伪头节点的下一个节点,真正的头节点。
        return list3.next;
    }
}

递归

解题思路:不断的比较双指针元素,在递到过程中找到较小的那个元素,在归的过程中将较小的元素指向下一个较小的元素,如此实现合并链表。 具体可以参考腐烂的橘子大佬的图形化过程。

java 复制代码
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        // 递归终止条件
        if(list1 == null){
            return list2;
        }
        if(list2 == null){
            return list1;
        }
        // 递归公式
        // 找到双指针中较小的元素,该元素指向后面递归中较小的元素(但是大于等于该元素)
        if(list1.val >= list2.val){
            list2.next = mergeTwoLists(list1, list2.next);
            return list2;
        }else{
            list1.next = mergeTwoLists(list1.next, list2);
            return list1;
        }
    }
}
相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集
码流子2 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark2 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法