合并两个有序链表(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
    }
}

手写思路:(仅供参考)

相关推荐
V***u4539 分钟前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿26 分钟前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9191 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08291 小时前
【监控】spring actuator源码速读
java·spring boot·spring
AndrewHZ1 小时前
【图像处理基石】如何在图像中提取出基本形状,比如圆形,椭圆,方形等等?
图像处理·python·算法·计算机视觉·cv·形状提取
麦麦鸡腿堡1 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
蓝牙先生1 小时前
简易TCP C/S通信
c语言·tcp/ip·算法
2501_941870561 小时前
Python在高并发微服务数据同步与分布式事务处理中的实践与优化
leetcode
vx_dmxq2111 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
5***g2981 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端