【力扣】[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;
    }
}
相关推荐
学长毕业设计1 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
东小西1 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西1 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
圣保罗的大教堂1 小时前
leetcode 1406. 石子游戏 III 困难
leetcode
许彰午1 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065252 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql
小范同学_2 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
予昊3 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
2601_962203513 小时前
【SpringAI入门】初识SpringAI
java
weixin_461408583 小时前
Mybatis-flex小记
java·开发语言·mybatis