复习Day07:链表part03:21. 合并两个有序链表、2. 两数相加

news2024/11/28 8:26:34

之前的blog链接:https://blog.csdn.net/weixin_43303286/article/details/131700482?spm=1001.2014.3001.5501

我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用CLion了,使用leetcode自带模拟面试环境。

链表章节的题目都体现出思想简单,但很难一次写对的特点,注意循环后条件什么时候是空指针,防止越界访问。

  1. 合并两个有序链表

image

这道题的整体思路就是使用两个指针,分别遍历l1和l2,取最小的那个作为结果链表p的next:

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode* p1 = list1;
        ListNode* p2 = list2;
        ListNode* dummy = new ListNode(0), *p = dummy;
        while(p1 != nullptr && p2 != nullptr){
            if(p1->val > p2->val){//插入p2到res中
                p->next = p2;
                p2 = p2->next;
            }else{
                p->next = p1;
                p1 = p1->next;
            }
            p = p->next;
        }
        if (p1 != NULL) {
        p->next = p1;
    }
    
    if (p2 != NULL) {
        p->next = p2;
    }
        return dummy->next;
    }
};

注意循环条件,一旦跳出循环,肯定说明p1或p2有一个结束了,那么就怕剩下的那个直接接上去,使用虚拟头节点简化运算。

(什么时候需要用虚拟头结点?我这里总结下:当你需要创造一条新链表的时候,可以使用虚拟头结点简化边界情况的处理。)

2 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,
并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。


image

这个的意思就是说将一个数字逐位存在了链表中,其中前面存的是低位,后面存的是高位。这样对于遍历顺序来说是符合我们的加法习惯的,如果相反还难搞些。

最终代码:

// 注意:cpp 代码由 chatGPT🤖 根据我的 java 代码翻译,旨在帮助不同背景的读者理解算法逻辑。
// 本代码已经通过力扣的测试用例,应该可直接成功提交。

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        // 在两条链表上的指针
        ListNode *p1 = l1, *p2 = l2;
        // 虚拟头结点(构建新链表时的常用技巧)
        ListNode *dummy = new ListNode(-1);
        // 指针 p 负责构建新链表
        ListNode *p = dummy;
        // 记录进位
        int carry = 0;
        // 开始执行加法,两条链表走完且没有进位时才能结束循环
        while (p1 != nullptr || p2 != nullptr || carry > 0) {
            // 先加上上次的进位
            int val = carry;
            if (p1 != nullptr) {
                val += p1->val;
                p1 = p1->next;
            }
            if (p2 != nullptr) {
                val += p2->val;
                p2 = p2->next;
            }
            // 处理进位情况
            carry = val / 10;
            val = val % 10;
            // 构建新节点
            p->next = new ListNode(val);
            p = p->next;
        }
        // 返回结果链表的头结点(去除虚拟头结点)
        return dummy->next;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1055689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Kafka专题】Kafka快速实战以及基本原理详解

目录 前言课程内容一、Kafka介绍1.1 MQ的作用1.2 为什么用Kafka 二、Kafka快速上手2.1 实验环境2.2 单机服务体验2.3 认识Kafka模型架构2.4 Kafka集群2.5 理解服务端的Topic、Partion和Broker2.6 章节总结:Kafka集群的整体结构 三、Kraft集群(拓展&#…

SpringMVC的请求映射:路由请求的精准导航

SpringMVC的请求映射:路由请求的精准导航 SpringMVC是一个用于构建Web应用程序的强大框架,它提供了众多的特性和组件来简化开发过程。其中,请求映射是SpringMVC中的一个关键特性,用于将HTTP请求映射到具体的处理方法。本文将深入…

电池集成充电解决方案提供商【XCharge Group】获得壳牌风险投资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于德国汉堡的电池集成充电解决方案提供商XCharge Group今日宣布已获得了壳牌风险投资公司的投资,这笔交易的金额没有披露。 XCharge Group计划将这笔资金用在三方面:…

Vue中的数据分页与分页组件设计

Vue中的数据分页与分页组件设计 在前端开发中,数据分页是一个常见的需求,特别是当处理大量数据时。Vue作为一款流行的JavaScript框架,提供了强大的工具和生态系统来实现数据分页。本文将介绍如何在Vue中进行数据分页,以及如何设计…

制作原创音乐app软件FL Studio21.2中文版

如果你正在录制、编辑或创作新歌曲,你会需要使用 FL Studio 快捷键。FL Studio 可用于录制、编辑和制作,以及专业人士录制和创作歌曲。在 FL Studio 中创建音乐专辑也是一个漫长的过程,可能会变得复杂且需要较长时间。很好的是,学…

20230224_HDR-ISP_unpack_depwl_01

https://github.com/JokerEyeAdas/HDR-ISP/tree/main 1.unpack:解析raw图 (1)unpack:2个字节1个像素 (2)mipi10:5个字节4个像素 [p1 9:2][p2 9:2][p3 9:2][p4 9:2][(p1 1:0)(p2 1:0)(p3 1:0)(p4 1:0)] (3)mipi12:3个字节2个像…

UE5 虚幻引擎 详解蓝图通信 必备的知识技能之一!!!

目录 0 引言1 直接蓝图通信1.1 在关卡蓝图中直接拖拽Actor1.2 Get Actor of Class/Get All Actors of Class 2 事件分发器2.1 创建事件分发器2.2 绑定事件分发器2.3 调用事件分发器 3 蓝图接口3.1 使用步骤3.2 为什么要使用蓝图接口 4 蓝图转换 0 引言 问题:为什么需…

优雅的写Controller 层代码这样写才可以

前 言 本篇主要要介绍的就是controller层的处理,一个完整的后端请求由4部分组成: 接口地址(也就是URL地址)请求方式(一般就是get、set,当然还有put、delete)请求数据(request,有head跟body)响应数据(response) 本篇将解决以下3个…

DHCP服务器原理

DHCP (Dynamic Host Configuration Protocol,动态主机配置协议) Linux系统DHCP服务配置文件为 /etc/dhcpd.conf DHCP租约过程 DHCP租约过程就是DHCP客户机动态获取IP地址的过程。 DHCP租约过程分为4步: •客户机请求IP(客户机发DHCPDISCOVER广播包);…

Electron 惊现十级漏洞,到底谁的锅?

最近开源软件又爆出一个十级漏洞,该漏洞冲击范围巨大,涉及数百万不同的应用程序,其中也包括 iOS、Android 应用程序以及使用 Electron 构建的跨平台应用程序。 这个漏洞两周前就已经被苹果和谷歌发现,但苹果和谷歌在披露漏洞时缺乏关键信息,造成了“巨大的盲点”,导致全…

ASUS华硕飞行堡垒5笔记本FX504GM_FX80GM原装出厂Windows10系统

系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接:https://pan.baidu.com/s/1C8vPvqiwqoUY3PxC915LXg?pwdv079

1、手把手教你学会使用 FlinkSQL客户端

目录 1、FlinkSQL客户端的功能 2、FlinkSQL客户端启动参数配置 2.1 基本语法 2.2 相关参数([MODE]): 2.3 相关参数(embedded [OPTIONS]): 3、启动Flink的sql-client 3.1 启动时使用初始化脚本 3.2 启动时指定依赖的jar包 3.3 基于yarn-session模…

28391-2012 建筑施工机械与设备 人力移动式液压动力站

声明 本文是学习GB-T 28391-2012 建筑施工机械与设备 人力移动式液压动力站. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了人力移动式液压动力站(以下简称动力站)的范围、分类、要求、试验方法和检验规则。 本标准适用于以中小…

在pycharm中弹出图后,需要关闭才会显示Process finished with exit code 0

在pycharm中弹出图后,需要关闭才会显示Process finished with exit code 0 在PyCharm中,当你运行一个Python程序并弹出一个图形窗口时,程序会等到图形窗口关闭后才会显示 “Process finished with exit code 0” 的消息。 这是 由于代码执行…

【Java 进阶篇】JDBC(Java Database Connectivity)详解

JDBC(Java Database Connectivity)是 Java 中用于连接和操作数据库的标准 API。它允许 Java 应用程序与不同类型的数据库进行交互,执行查询、插入、更新和删除等操作。本文将详细介绍 JDBC 的各个类及其用法,以帮助您更好地理解和…

Vue.js3学习篇--Vue模板应用

目录 一,模板基础 1.模板插值 (1)基础插值 (2)HTML代码插值 (3)标签属性插值 2.模板指令 (1)定义 (2)指令参数 二.条件渲染 1.使用v-if指令渲染 2.使…

采集SEO方法-添加链接段落

采集大量的文章数据,要想批量做SEO添加链接段落方法,可以使用简数采集器的处理规则实现。 简数采集器的一个处理规则,可以包含多种SEO方法,还可自由组合,强大灵活方便。 添加补充链接段落的SEO技巧: 1&a…

vue2与vue3 v-model的区别

目录 Vue 2中的v-model 默认使用 自定义使用 修饰符.sync (Vue2) Vue3.x 使用 v-model vue 3 的v-model使用原理 多个 v-model 使用 总结 Vue 2中的v-model 在Vue 2中,v-model是一个用于在子组件和父组件之间双向绑定数据的指令。当在子组件中使用v-mode…

【数据结构】AVL树(C++实现)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【数据…

性格敏感怎么办?改变性格敏感的方法有哪些?

有这么一群人,他们的情绪很容易受到外界的影响,就像一汪宁静的湖水,被风轻易地吹出皱纹。他们有着高度敏感的神经,外界稍微一点风吹草动,就会牵动他们紧张的情绪。 他们的思维就像脱缰的野马,生活中任何一…