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

手写思路:(仅供参考)

相关推荐
楼田莉子1 分钟前
数据学习之队列
c语言·开发语言·数据结构·学习·算法
写不出来就跑路2 分钟前
SpringBoot静态资源与缓存配置全解析
java·开发语言·spring boot·spring·springboot
墨着染霜华6 分钟前
Caffeine的tokenCache与Spring的CaffeineCacheManager缓存区别
java·spring·缓存
秋说18 分钟前
【PTA数据结构 | C语言版】返回单链表 list 中第 i 个元素值
c语言·数据结构·list
pinlantu19 分钟前
Java开发笔记(一百五十五)生成随机数的几种途径
java·eclipse
雾里看山24 分钟前
数据结构之队列
数据结构
让我们一起加油好吗29 分钟前
【基础算法】贪心 (四) :区间问题
c++·算法·贪心算法·洛谷
Shimiy1 小时前
第四章 数组
java
间彧1 小时前
什么是JVM Young GC
java·jvm
xiaok1 小时前
@Param注解的作用
java·后端