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

手写思路:(仅供参考)

相关推荐
前端小马8 分钟前
前后端Long类型ID精度丢失问题
java·前端·javascript·后端
Lisonseekpan9 分钟前
Java Caffeine 高性能缓存库详解与使用案例
java·后端·spring·缓存
~kiss~15 分钟前
K-means损失函数-收敛证明
算法·机器学习·kmeans
杨小码不BUG23 分钟前
Davor的北极探险资金筹集:数学建模与算法优化(洛谷P4956)
c++·算法·数学建模·信奥赛·csp-j/s
SXJR43 分钟前
Spring前置准备(七)——DefaultListableBeanFactory
java·spring boot·后端·spring·源码·spring源码·java开发
mit6.8241 小时前
10.5 数位dp
c++·算法
心态特好2 小时前
详解WebSocket及其妙用
java·python·websocket·网络协议
2401_881244402 小时前
P3808 AC 自动机(简单版)
算法
Jayden_Ruan2 小时前
C++十进制转二进制
数据结构·c++·算法
Haooog3 小时前
98.验证二叉搜索树(二叉树算法题)
java·数据结构·算法·leetcode·二叉树