当前位置: 首页 > news >正文

【练习】【链表】力扣热题100 21. 合并两个有序链表

题目

在这里插入图片描述

来源:力扣热题100 21. 合并两个有序链表


思路(注意事项)

  • 新建一个头节点,操作。
ListNode* head = new ListNode(0);
  • 此题不用放断链。
  • 最终返回链表可以不用删除头节点,直接找到对应的位置返回。

纯代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode* head = new ListNode(0);
        ListNode *e = head;
        
        while (list1 != nullptr && list2 != nullptr)
        {
            
            if (list1 -> val >= list2 -> val)
            {
                e -> next = list2;
                list2 = list2 -> next;
            }
            else
            {
                e -> next = list1;
                list1 = list1 -> next;
            }
            e = e ->next;
        }

        if (list1 != nullptr) e -> next = list1;
        if (list2 != nullptr) e -> next = list2;

        return head -> next;
    }
};

题解(加注释)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {} // 默认构造函数
 *     ListNode(int x) : val(x), next(nullptr) {} // 带值的构造函数
 *     ListNode(int x, ListNode *next) : val(x), next(next) {} // 带值和下一个节点的构造函数
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        // 创建一个虚拟头节点,方便操作
        ListNode* head = new ListNode(0);
        // 定义一个指针 e,用于遍历新链表
        ListNode *e = head;
        
        // 遍历两个链表,直到其中一个链表为空
        while (list1 != nullptr && list2 != nullptr) {
            // 比较两个链表当前节点的值
            if (list1->val >= list2->val) {
                // 如果 list2 的当前节点值较小,将其接入新链表
                e->next = list2;
                // 移动 list2 的指针到下一个节点
                list2 = list2->next;
            } else {
                // 如果 list1 的当前节点值较小,将其接入新链表
                e->next = list1;
                // 移动 list1 的指针到下一个节点
                list1 = list1->next;
            }
            // 移动新链表的指针到下一个节点
            e = e->next;
        }

        // 如果 list1 还有剩余节点,将其全部接入新链表
        if (list1 != nullptr) e->next = list1;
        // 如果 list2 还有剩余节点,将其全部接入新链表
        if (list2 != nullptr) e->next = list2;

        // 返回新链表的头节点(跳过虚拟头节点)
        return head->next;
    }
};

相关文章:

  • 【Flink银行反欺诈系统设计方案】1.短时间内多次大额交易场景的flink与cep的实现
  • FineReport 操作注意
  • 【AI Guide】AI面试攻略只用看这一篇就够了!力争做全网最全的AI面试攻略——大模型(三十一)BASE与CHAT模型
  • Ubuntu20.04双系统安装及软件安装(一):系统安装
  • 备考六级:词汇量积累(day2)
  • 【流行病学】Melodi-Presto因果关联工具
  • vim 调整字体
  • vue3中 组合式测试深入组件—事件 与 $emit()
  • 硬件学习笔记--47 LDO相关基础知识介绍
  • wpa_supplicant源码剖析-main.c解析
  • 策略模式的C++实现示例
  • Java基础关键_017_集合(一)
  • 3D手眼标定转换详细实施步骤及原理概述
  • 初始提示词(Prompting)
  • dify智能体之不知道有啥用系列之使用chatflow让selenium打开特定网址
  • 数据序列化协议 Protobuf 3 介绍(Go 语言)
  • e2studio开发RA4M2(17)----ADC扫描多通道采样
  • 基于Java+SpringCloud+Vue的前后端分离的房产销售平台
  • 从小米汽车召回看智驾“命门”:智能化时代 — 时间就是安全
  • 【零基础到精通Java合集】第二十四集:ZGC收集器详解
  • 网站建设 昆明/网站建设流程步骤
  • 河北网站建设市面价/百度网站推广价格
  • 怎样搭建一个企业网站/南昌seo全网营销
  • 广州网站建设+致茂/google seo实战教程
  • 网站建设公司考察/网站备案查询系统
  • 小程序开发免费平台/优就业seo