【算法】链表:2.两数相加(medium)+模拟

news2024/10/9 20:40:57

 系列专栏

《分治》

《模拟》

《Linux》


目录

1、题目链接 

2、题目介绍

3、解法 (模拟)

4、代码


 

1、题目链接 

2. 两数相加 - 力扣(LeetCode)

2、题目介绍

3、解法 (模拟)

  1. 理解题目要求
    • 我们有两个链表,每个链表代表一个逆序存储的非负整数。
    • 我们需要将这两个数相加,并以相同的形式(逆序链表)返回结果。
  2. 初始化
    • 创建两个指针 cur1 和 cur2 分别指向两个链表的头节点。
    • 创建一个新的链表 l3 来存储结果,并且为了方便操作,我们使用一个哑节点 dummy,其 next 指向 l3。哑节点的作用是方便处理边界情况,最后返回结果时只需返回 dummy->next
    • 初始化一个变量 num 来保存进位值,初始为 0。
  3. 遍历链表
    • 使用一个 while 循环来遍历两个链表,条件是 cur1 或 cur2 不为空,或者 num(进位值)不为 0。
    • 在每次循环中,如果 cur1 为空,则将 a 设为 0;如果 cur2 为空,则将 b 设为 0。这样做是为了处理链表长度不一致的情况。
    • 计算当前位的和 sum = a + b + num
  4. 处理进位和创建新节点
    • 计算新的进位值 num = sum / 10
    • 计算当前位的值 sum %= 10,这是实际要添加到结果链表中的值。
    • 在 l3 后面创建一个新节点,其值为 sum,然后移动 l3 指针到这个新节点。
  5. 移动指针
    • 如果 cur1 不为空,将其移动到下一个节点。
    • 如果 cur2 不为空,将其移动到下一个节点。
  6. 返回结果
    • 循环结束后,返回 dummy->next,即跳过了哑节点,返回的是实际存储结果的链表的头节点。

这种方法的时间复杂度是 O(max(m, n)),其中 m 和 n 分别是两个链表的长度,因为我们最多遍历两个链表各一次。空间复杂度是 O(max(m, n)),因为我们需要创建一个新的链表来存储结果,其长度最多与较长的链表相同。

4、代码

/**
 * 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* addTwoNumbers(ListNode* l1, ListNode* l2) {
        //两个链表肯定不为空
        ListNode* cur1 = l1;
        ListNode* cur2 = l2;
        
        ListNode* l3 = new ListNode(0);//新链表,创建一个头节点
        ListNode* dummy = l3;
        int num = 0;
        while (cur1 != NULL || cur2 != NULL || num)    //需要考虑进位,加到最后,有进位还需要进一步创建新的节点
        {
            int sum = 0;//每位上的求和
            int a = cur1 == nullptr ? 0 : cur1->val;
            int b = cur2 == nullptr ? 0 : cur2->val;
            sum = a + b + num;//加上,上一次和的进位(0/1)

            //处理进位
            num = sum / 10;
            sum %= 10;//无论是否进位,%都不影响结果
            //添加元素
            l3->next = new ListNode(sum);
            l3 = l3->next;

            if(cur2!=NULL)cur2 = cur2->next;
            if (cur1 != NULL)cur1 = cur1->next;
        }
        return dummy->next;

    }
};

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

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

相关文章

完成Sentinel-Dashboard控制台数据的持久化-同步到Nacos

本次案例采用的是Sentinel1.8.8版本 一、Sentinel源码环境搭建 1、下载Sentinel源码工程 git clone https://github.com/alibaba/Sentinel.git 2、导入到idea 这里可以先运行DashboardApplication.java试一下是否运行成功,若成功,源码环境搭建完毕&a…

华为OD机试 - 最长广播响应 - 广度优先搜索(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

计算机视觉学习笔记--高斯金字塔,DoG金字塔和拉普拉斯金字塔附带代码

尺度空间和图像金字塔 尺度并非指图像的大小,而是指图像的模糊程度,从近距离到远距离图像越来越模糊的过程,也是图像的尺度越来越大的过程。尺度空间是图像在不同尺度下的连续表示。其中最常见的是使用高斯核对图像进行卷积。随着高斯滤波核…

网格剖分-耳切法效果展示

1.前言 将简单多边形转换成一组由同样顶点组成的三角形集合是计算机图形学中的一个经典问题。问题中,简单多边形是指由一组有序顶点组成的,点V0~点Vn-1。相邻的顶点之间通过边(Vi,Vi-1)连接,并且边(Vn-1,V0)连接起始点…

换毛季来临,铲屎官如何应对猫咪掉毛?宠物空气净化器该怎么选?

养猫前,我是潇洒自如的单身汉;养猫后,我就是勤恳辛劳的保姆!每天下班还要“伺候”猫孩子,收拾它一天在家掉落的猫毛。虽说我没有洁癖,但换毛季可不是开玩笑的,稍微偷懒几天没有清理,…

C++竞赛初阶—— 石头剪子布

题目内容 石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比…

苹果开发者网站iOS应用创建全流程详解

引言 在当今的移动开发领域,uni-app 和 Flutter 等跨平台开发工具为开发者提供了便利,可以一次编写代码并部署到多个平台。然而,尽管这些工具简化了应用的开发过程,但它们在iOS应用的构建和发布环节往往并不涉及太多。对于希望在…

上传本地项目到GitHub远程仓库(极简洁操作版)

第一步:在GitHub创建一个空的仓库 第二步:将仓库克隆(下载)到本地 第三步:将你要上传的所有文件放到这个克隆的仓库文件夹中 第四步:通过git add .将待上传文件添加到暂存区 此时,可以通过git …

网际报文协议ICMP及ICMP重定向实例详解5

之前在一个项目中遇到了与ICMP重定向相关的问题,因为缺乏对ICMP相关内容的了解,排查了很长一段时间才查出来。本文给大家简要地介绍一下ICMP及ICMP重定向相关的内容。 1、ICMP的概念 ICMP(Internet Control Message Protocol)网际…

156-反溯源隐藏C2项目域前置云函数数据中转DNS转发

演示案例: CS-隐藏防朔源-域前置-C2&CDN CS-隐藏防朔源-云函数-C2&API 触发 CS-隐藏防朔源-DNS 解析-C2&流量伪装 CS-隐藏防朔源-数据转发-C2&Iptables&中间件 接上节课的知识点,上节课只讲了利用CDN进行隐藏的方式 #域前置-CDN 配合…

每日一练:分割回文串Ⅳ

1745. 分割回文串 IV - 力扣(LeetCode) 题目要求: 给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。 当一个字符串正着读和反着读是一模一样的&#xff0…

Win32 API 控制台鼠标操作、坐标获取与相关函数介绍

Win32 API 控制台鼠标操作、坐标获取与相关函数介绍 一、前置介绍读取控制台输入缓冲区数据 ReadConsoleInput 函数控制台输入缓冲区中的输入事件 INPUT_RECORD 结构鼠标输入事件 MOUSE_EVENT_RECORD 结构更改输入模式 SetConsoleMode 函数 二、鼠标坐标获取(以下代码环境为 VS…

阿里出品2024版Java架构师面试指南,涵盖Java所有核心技能

最近很多粉丝朋友私信我说:熬过了去年的裁员潮却没熬过现在的内卷;打开Boss直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉Java一个初中级岗位有上千人同时竞争&#xf…

面试必备:经典的 Shell 十三问!

1. 为何叫做shell? 我们知道计算机的运作不能离开硬件,但使用者却无法直接操作硬件,硬件的驱动只能通过一种称为操作系统(OS,Operating System)的软件来管控。linux严格来说只是一个操作系统,我们称之为内核(kernel)。 使用者没…

基于vue框架的大学生在线教育jp6jw(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:学生,教师,课程类型,课程信息,资料类型,课程资料,课程名称,选课信息,学生咨询,教师回复 开题报告内容 基于Vue框架的大学生在线教育平台开题报告 一、课题背景 随着互联网技术的飞速发展和全球教育需求的日益多元化,在线教…

单细胞转录组 —— STARsolo 原始数据处理

单细胞转录组 —— STARsolo 原始数据处理实战 前言 前面我们已经介绍了几种原始数据处理工具,最后再介绍一种多平台兼容的快速定量工具 —— STARsolo。 主要使用的还是 STAR 比对软件,只是增加了更多对单细胞数据的处理,不同平台数据的差…

2.5 Spring Boot整合Spring MVC框架

今天,我将向大家介绍如何在Spring Boot中整合Spring MVC框架,并展示如何创建和测试控制层(Controller)。 首先,让我们简要回顾一下Spring MVC。Spring MVC是一个基于Servlet的MVC框架,它简单、侵入性小&am…

安装Node.js环境,安装vue工具

一、安装Node.js 去官方网站自行安装自己所需求的安装包 这是下载的官方网站 下载 | Node.js 中文网 给I accept the terms in the License Agreement打上勾然后点击Next 把安装包放到自己所知道的位置,后面一直点Next即可 等待它安装好 然后winr打开命令提示符cmd 二、安装…

线稿如何快速上色?AI自动线稿上色教程分享

前言 在数字艺术的世界里,上色是一个既耗时又需要技巧的步骤。幸运的是,随着AI技术的发展,我们有了像千鹿AI这样的工具,它可以帮助艺术家和设计师自动完成线稿的上色工作。以下是使用千鹿AI进行自动线稿上色的详细教程。 准备工作…

vue 入门二

参考&#xff1a;丁丁的哔哩哔哩 11.组件基础 传递 props 1.父组件 <BlogPost title"My journey with Vue" />子组件<script setup> defineProps([title]) </script><template><h4>{{ title }}</h4> </template>2.prop…