合并两个有序链表(leetcode刷题)

题目描述:

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

示例 1:

复制代码
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

复制代码
输入:l1 = [], l2 = []
输出:[]

示例 3:

复制代码
输入:l1 = [], l2 = [0]
输出:[0]

初步思路:

·满足顺序(选择更小)

·遍历

·注意链表的特点

代码实现:

java 复制代码
class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // 创建一个虚拟的头节点
        ListNode dummy = new ListNode();
        ListNode current = dummy;

        // 遍历两个链表,选择较小的节点连接到新链表
        while (l1 != null && l2 != null) {
            if (l1.val <= l2.val) {
                current.next = l1;  // 将 l1 的节点加入新链表
                l1 = l1.next;       // l1 向后移动
            } else {
                current.next = l2;  // 将 l2 的节点加入新链表
                l2 = l2.next;       // l2 向后移动
            }
            current = current.next;  // current 移动到新链表的末尾
        }

        // 如果 l1 或 l2 中有剩余的节点,直接连接到新链表的末尾
        if (l1 != null) {
            current.next = l1;
        } else if (l2 != null) {
            current.next = l2;
        }

        // 返回新链表的头节点,跳过虚拟的头节点
        return dummy.next;
    }

    // 打印链表的工具方法
    public void printList(ListNode head) {
        ListNode current = head;
        while (current != null) {
            System.out.print(current.val + " ");
            current = current.next;
        }
        System.out.println();
    }

    public static void main(String[] args) {
        Solution solution = new Solution();

        // 创建两个示例链表 l1 和 l2
        ListNode l1 = new ListNode(1, new ListNode(2, new ListNode(4)));
        ListNode l2 = new ListNode(1, new ListNode(3, new ListNode(4)));

        // 合并链表
        ListNode mergedList = solution.mergeTwoLists(l1, l2);
        // 打印合并后的链表
        solution.printList(mergedList);  // 输出: 1 1 2 3 4 4
    }
}

手写思路:(仅供参考)

相关推荐
泡海椒3 分钟前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
小智老师PMP18 分钟前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
heima201619 分钟前
长期复盘:餐饮店活动拓客链接的行业现状与使用困境
链表
HugoStudio_SWAN22 分钟前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
a1879272183135 分钟前
【算法】动态规划第二篇:双序列 DP 三课——继承、计步与断链
算法·leetcode·动态规划·dp·回溯·暴力·算法讲解
Rain的Java大神之路1 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
自动化监测Learner1 小时前
Navicat Premium 17 中文版安装教程(2026最新版)
java·linux·数据库
江畔柳前堤1 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
那个松鼠很眼熟w1 小时前
4.Spring-Ai入门案例
java·人工智能·spring
计算机毕设定制辅导-无忧学长2 小时前
《基于SpringBoot青年公寓出租管理系统的设计与实现》
java·vue.js·spring boot·青年公寓出租管理系统