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

手写思路:(仅供参考)

相关推荐
青山木22 分钟前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
未来之窗软件服务26 分钟前
计算机考试-快速排序—东方仙盟
数据结构·算法·排序算法·仙盟创梦ide·东方仙盟
小龙报39 分钟前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
wWYy.1 小时前
数据结构:跳表
数据结构
自强的小白1 小时前
重点!起始时间和结束时间与创建时间和修改时间的区别(localdate与LocaldateTIME区别)以及增删改查什么时候设置目前时间(添加和更新员工时)
java
雪的季节1 小时前
Python 线程同步与异步编程 全解析
java·开发语言
吃饱了得干活1 小时前
缓存与数据库一致性:从理论到实战
java·后端·面试
txzrxz1 小时前
数论:排列数、组合数、费马小定理、逆元、同余定理
c++·算法·数论·组合数·费马小定理·逆元·排列数
xqqxqxxq1 小时前
LeetCode Hot100 双指针专项题解笔记
笔记·算法·leetcode
520拼好饭被践踏1 小时前
JAVA+Agent学习day22
java·开发语言·后端·学习