【力扣】[Java版] 刷题笔记-21. 合并两个有序链表

题目: 21. 合并两个有序链表

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

解题思路

从题目和示例可以看出,应该是要循环遍历链表进行比较,然后组成新的链表。

第一种:递归

第二种:迭代

解题过程

第一种:递归

1、先判断两个链表是否为空,如果list1为空,则返回list2,如果list2为空,则返回list1。

2、如果都不为空,递归比较每个节点大小,直到最后一个节点。

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if (list1 == null) {
            return list2;
        } else if (list2 == null) {
            return list1;
        } else if (list1.val < list2.val) {
            list1.next = mergeTwoLists(list1.next, list2);
            return list1;
        } else {
            list2.next = mergeTwoLists(list1, list2.next);
            return list2;
        }
    }
}

第二种:迭代

1、先判断两个链表是否为空,如果list1为空,则返回list2; 如果list2为空,则返回list1。

2、其次创建新的链表,作为整个链表的头部head,再创建一个nextNode用于指向下一个节点,比较list1和list2的每个节点,将较小的节点赋值给nextNode。

3、最后返回head.next,即为新的链表。

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if (list1 == null) {
            return list2;
        } else if (list2 == null) {
            return list1;
        }
        ListNode head =  new ListNode(-1);
        ListNode nextNode = head;
        while (list1 != null && list2 != null) {
            if(list1.val < list2.val) {
                nextNode.next = list1;
                list1 = list1.next;  
            } else {
                nextNode.next = list2;
                list2 = list2.next;  
            }
            nextNode = nextNode.next;
        }
        nextNode.next = list1 == null ? list2 : list1;

        return head.next;
    }
}
相关推荐
风象南11 分钟前
Spring Boot 实现文件秒传功能
java·spring boot·后端
橘猫云计算机设计12 分钟前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计
黑猫Teng16 分钟前
Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南
java·spring boot·后端
星河浪人22 分钟前
Spring Boot启动流程及源码实现深度解析
java·spring boot·后端
佩奇的技术笔记23 分钟前
中级:Maven面试题精讲
java·面试·maven
Lizhihao_34 分钟前
JAVA-堆 和 堆排序
java·开发语言
极客先躯39 分钟前
高级java每日一道面试题-2025年3月21日-微服务篇[Nacos篇]-什么是Nacos?
java·开发语言·微服务
工业互联网专业1 小时前
基于springboot+vue的动漫交流与推荐平台
java·vue.js·spring boot·毕业设计·源码·课程设计·动漫交流与推荐平台
雷渊1 小时前
深入分析Spring的事务隔离级别及实现原理
java·后端·面试
rebel1 小时前
Java获取excel附件并解析解决方案
java·后端