HOT28-两数相加

news2024/10/6 4:06:34

leetcode原题链接:两数相加

题目描述

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

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

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

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

解题方法: 用一个变量carry记录是否进位,用两个指针分别扫描两个链表,则当前相加后的值为:num = (num1+num2+carry) % 10, carry=(num1+num2) / 10,最后还有考虑遍历完两个链表之后是否还有进位。

C++代码

#include <iostream>
#include <memory>
/**
 * 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) {
        std::shared_ptr<ListNode> dummy_node (new ListNode(0));//哨兵指针
        ListNode* p = dummy_node.get();
        if (!p) {
            return nullptr;
        }
        ListNode* p1 = l1;
        ListNode* p2 = l2;
        int carray = 0;
        while (p1 || p2) {
            int value1 = (p1 == nullptr ? 0 : p1->val);
            int value2 = (p2 == nullptr ? 0 : p2->val);
            if (p) {
                int sum =  (value1 + value2 + carray) % 10; //计算当前位的和
                p->next = new ListNode(sum);
                p = p->next;
            }
            carray = (value1 + value2 + carray) / 10;//计算进位
            if (p1) {
                p1 = p1->next;
            }
            if (p2) {
                p2 = p2->next;
            }
        }
        if (carray > 0) { //这里不能落下,需要考虑最后是否有进位
            p->next = new ListNode(carray);

        }
        return dummy_node->next;
    }
};

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

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

相关文章

搭建mysql集群(Windows环境)

1、MySQL集群简介 MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性&#xff0c;增强了安全性&#xff0c;使得单个MySQL服务器故障不会对系统产生巨大的负面效应&#xff0c;系统的稳定性得到保障。 MySQL群集需要有一组计算机&#xff0c;每台计算机的…

element封装 table表格 ,插槽的使用,修改el-table-column的值

举例 vue2这种不封装的 直接写的很罗嗦麻烦 下面圈起来的可以封装一个对象 进行循环 弊端: 循环后 无法进行获取更改某一列的值 比如data日期我需要转换年月日 不循环我直接在这个el-table-column的这一列进行写&#xff08;如下&#xff09; <el-table-column label&quo…

COMSOL基于随机Voronoi骨架的三维多孔材料泡沫铝骨小梁模型力学分析

力学模型 模型计算为圆柱体试件轴压模型&#xff0c;在轴向荷载作用下应力分布的计算。 几何生成 采用CAD Voronoi3D插件在AutoCAD内直接生成三维Voronoi&#xff0c;其计算参数如下&#xff1a; 模型生成后删除晶格部件&#xff0c;并对晶粒进行一步平滑处理&#xff1a…

Centos7系统,虚拟机断电后启动报错:You might want to save “/run/initramfs/rdsosreport.txt“

虚拟机突然断电造成centos8系统无法启动 Linux报You might want to save “/run/initramfs/rdsosreport.txt“ to a USB stick or /boot after mounting 1.解决方法&#xff1a; 大家可以用umr查看到自己装的镜像对应的以-root结尾的文件是哪个。因为大家装的镜像不同&#x…

多语言翻译node工具

多语言 i18n 翻译node工具 介绍 本文是为了方便使用 i18n的翻译工具&#xff0c;实现把excel的内容追加或更改到项目中的多语言文件中主要文件为 index.js 、test.txt 和 dist 文件夹内所有内容&#xff08;dist为项目中需要翻译的多语言文件&#xff0c;下面有例子&#xff…

有源、无源晶振的区别

在PCB设计中&#xff0c;晶振&#xff08;晶体振荡器&#xff09;是非常重要的电子元器件&#xff0c;相信大部分的PCB工程师对它都不会陌生。而对于有源晶振与无源晶振&#xff0c;很多人却是“傻傻分不清楚”。 我们知道&#xff0c;电子线路中的晶体振荡器分为无源晶振和有源…

TI AM64x工业核心板硬件说明书(双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F,主频1GHz)

1 硬件资源 创龙科技SOM-TL64x是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 单/四核Cortex-R5F 单核Cortex-M4F设计的多核工业级核心板&#xff0c;通过工业级B2B连接器引出5x TSN Ethernet、9x UART、2x CAN-FD、GPMC、PCIe/USB 3.1等接口。核心板经过专业的P…

如何配置git的.bashrc文件

1、进入到.git文件里&#xff1a;新建一个.bashrc文件 2、打开.bashrc文件添加配置信息&#xff1a; 代码&#xff1a; #用于输出git提交日志 alias git-loggit log --prettyoneline --all --graph --abbrev-commit #用于输出当前目录所有文件及基本信息 alias llls -al …

Git入门(职场必备工具)

目录 一、git在职场中的重要性 1.1git是什么&#xff1f; 1.2什么是版本控制 1.3学习这个工具的作用和目的 二、Git开发必备技能及其应用场景 2.1 如何用Git对一个目录进行版本控制流程&#xff1f; 三、Git 如何上传和提取代码 3.1 克隆远端库到本地库 3.2 将本地库推…

硬件学习件Cadence day12 PCB设计中打地孔与地孔设计,PCB 后期处理,钻孔文件导出

1. 制作 过地孔的焊盘 &#xff08;两种方法&#xff09;&#xff08;又叫制作盲埋孔&#xff09; 1.1 制作热风焊盘 &#xff08;之前的教程有&#xff0c;现在只给数据&#xff09; 1.2 第一种 allegro 外部 焊盘软件制作 1.2.1 打开软件 1.2.2 制作焊盘&#xff0c;查看…

使用Divi创建在线学习管理 (LMS) 网站

我喜欢在线学习课程。开始一个设计良好、组织良好、内容丰富的线上课程是有道理的。如果做得好&#xff0c;这些线上课程可以让您充满成就感。但是学习一门很棒的线上课程和创建一个线上课程是两种完全不同的体验。根据我的经验&#xff0c;创建学习管理/线上课程网站可能是一个…

自动刷新工具--可以自动编辑安居客房源信息

本工具可以自动刷新安居客的房源信息&#xff0c;不是爬虫&#xff0c;就是一款解放劳动力的RPA工具 使用方法&#xff1a; 1. 首先输入要自动刷新的房源id 2.点击 开始执行 如果需要免密登陆&#xff0c;需要在个人中心填上anjuke的账密 定时执行 声明&#xff1a;此工具只是…

kafka入门,数据可靠性(八)

1、回顾发送流程 2、ACK应答原理 0&#xff1a;生斥责发送过来的数据&#xff0c;不需要等数据落盘应答&#xff08;数据可靠性分析&#xff1a;丢数&#xff09; 1&#xff1a;生产者发送过来的数据&#xff0c;leader收到数据后应答&#xff08;数据可靠性分析&#xff1a;丢…

前端网络基础

目录 网络分层模型OSI七层模型TCP/IP四层模型TCP/IP五层模型 HTTP传递消息的模式传递消息的格式响应码 URL用户代理/user agent自动发送请求自动解析响应 AJAXXHRFetch 跨域同源与异源网络通信中的跨域浏览器对跨域的限制CORS简单请求对简单请求的验证 预检请求对预检请求的验证…

第4讲:使用ajax技术实现菜单展开或隐藏功能(xml数据)

使用ajax技术实现点击菜单时&#xff0c;展开当前子菜单列表&#xff0c;隐藏其他子菜单功能&#xff1b;前端使用静态html页面生成一级菜单&#xff0c;当点击某个菜单时&#xff0c;发送数据到后端(jsp文件)&#xff0c;利用responseXML返回xml格式文件&#xff0c;刷新二级菜…

机器学习李宏毅学习笔记35

文章目录 前言一、Meta learning1.第一步2.第二步3.第三步 二、machine learning 和 meta learning区别总结 前言 Meta learning元学习&#xff1a;学习如何学习 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、Meta learning 学习这件事也是一个…

webassembly安装python环境问题

在部署emscripten过程中&#xff0c;步骤emsdk install latest报错&#xff1a; 本以为是多个版本或版本不对应导致的&#xff0c;但是卸载所有版本并安装python3.9之后还是不行。 现象就是在cmd中使用python --version不报错也无版本显示。 一波bing~之后找到了结果(PYTHON|…

《Opencv3编程入门》学习笔记—第九章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第九章 直方图与匹配 一、图像直方图概述 1、作用&#xff1a;   在每个兴趣点设置一个有相近特征的直方图所构成的标签&#xff0c;通过标记帧与帧之间显著的边缘、颜…

性能测试讲解超详细Jmeter

目录 什么是性能 性能测试的目的 功能测试和性能测试 基准测试 负载测试 稳定性测试 压力测试 并发测试 总结 性能测试指标 响应时间 并发数 吞吐量 点击数 错误率 资源使用率 总结 性能测试流程 性能测试需求分析 性能测试计划和方案 ​编辑性能测试用例​编辑 性…

【Linux系统编程】shell的感性理解——王婆说媒

文章目录 1. shell是什么&#xff1f;它有什么作用&#xff1f;2. 透过王婆说媒感性理解shell的运行机制开端发展波澜渐起&#xff08;正常命令的处理&#xff09;故事角色与处理过程中各部分的映射走向高潮&#xff08;非法请求的处理&#xff09;shell 存在的意义结尾 1. she…