力扣2. 两数相加

Problem: 2. 两数相加

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

思路

1.创建虚拟头节点dummy,用于存储相加的结果数字;
2.让指针p1、p2、tail分别指向l1、l2、dummy,定义int变量carry记录每次相加的进位值;
3.当p1不为空或者p2不为空时,定义int变量sum:

3.1 若p1不为空:sum += p1 -> val;
3.2 若p2不为空:sum += p2 -> val;
3.3 若craay不为空: sum += carry;
3.4 生成当前的结果(tail -> next = new ListNode(sum % 10);),并更新carry(carry = sum / 10;)
3.5 最后遍历完l1与l2后carry还不为0,则再将其添加到结果链表末尾

复杂度

时间复杂度:

O ( m a x ( m , n ) ) O(max(m,n)) O(max(m,n));其中 m m m为链表l1的长度, n n n为链表l2的长度

空间复杂度:

O ( m + n ) O(m + n) O(m+n)

Code

/**
 * 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:
    /**
     *
     * @param l1 Given linked list l1
     * @param l2 Given linked list l2
     * @return ListNode*
     */
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* p1 = l1;
        ListNode* p2 = l2;
        int carry = 0;
        ListNode* dummy = new ListNode(666);
        ListNode* tail = dummy;
        if (l1 == nullptr) {
            return l2;
        }
        if (l2 == nullptr) {
            return l1;
        }
        while (p1 != nullptr || p2 != nullptr) {
            int sum = 0;

            if (p1 != nullptr) {
                sum += p1 -> val;
                p1 = p1 -> next;
            }
            if (p2 != nullptr) {
                sum += p2 -> val;
                p2 = p2 -> next;
            }
            if (carry != 0) {
                sum += carry;
            }
            tail -> next = new ListNode(sum % 10);
            carry = sum / 10;
            tail = tail -> next;
        }
        //If carry is not equal to 0
        if (carry != 0) {
            tail -> next = new ListNode(carry);
        }
        return dummy -> next;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双非计算机考研目标211,选11408还是22408更稳?

求稳得话,11408比22408要稳! 很多同学只知道,11408和22408在考察的科目上有区别,比如: 11408考的是考研数学一和英语一,22408考察的是考研数学二和英语二: 考研数学一和考研数学二的区别大吗…

会话跟踪技术(Session 以及Cookie)

一: 前提概要 1>会话: 会话指的是用户打开浏览器, 访问某些web服务器资源的时候, 会话就会进行建立, 直到有一方断开, 那么会话才会结束, 需要注意的一点是, 一次的会话可以有多次的请求以及响应 2>会话跟踪: 是一种用于维护浏览器状态的方法, 服务器需要识别多次的请求,…

与鲸同行,智领未来!和鲸科技“人工智能+X”学科建设合作交流会(北京站)圆满结束!

在国家加快发展新质生产力的大背景下,3月25日下午,和鲸科技 2024 年“人工智能X”学科建设合作交流会(北京站)暨“AIX”实验室建设与供应商选型座谈会顺利召开。为提供更为集中和专业的讨论环境,本次会议特别采取闭门审…

Flink on Kubernetes (flink-operator) 部署Flink

flink on k8s 官网 https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.1/docs/try-flink-kubernetes-operator/quick-start/ 我的部署脚本和官网不一样,有些地方官网不够详细 部署k8s集群 注意,按照默认配置至少有两台wo…

概率论经典题目-二维随机变量及分布--求离散型的联合分布律和边缘分布律问题

题目:一整数N等可能地在1,2,3,…,10十个值中取一个值设DD(N)是能整除N的正整数的个数,FF(N)是能整除N的素数的个数(注意1不是素数).试写出D和F的联合分布律,并求边缘分布律? 解答: 1)要确定整数 N 能够被整除的正整数个数 D 和素…

Quiet-STaR:让语言模型在“说话”前思考

大型语言模型(llm)已经变得越来越复杂,能够根据各种提示和问题生成人类质量的文本。但是他们的推理能力让仍然是个问题,与人类不同LLM经常在推理中涉及的隐含步骤中挣扎,这回导致输出可能在事实上不正确或缺乏逻辑。 考虑以下场景:正在阅读一…

可重复不限数量结构数列的演化

有一个6*6的平面,这个平面的行和列可以自由的变换,在这个平面上有一个4点结构数列 按照8,13,5,8的顺序排列。让这个数列按照4-5-4的方式演化 这个数列很快收敛,收敛顺序为13,8,8,5 8…

Revit文件版本查看小工具

最近群里和私信的时候,经常有小伙伴询问如何不打开Revit查看Revit文件的版本。 习惯性的,第一思路是打开Dynamo,但是第一反应还需要先开Revit。 另外呢,群里小伙伴说优比的插件也可以。 总之呢,都需要一些工具&#xf…

对接中泰极速行情 | DolphinDB XTP 插件使用教程

XTP 是中泰证券推出的高性能交易平台,专为专业投资者提供高速行情及交易系统,旨在提供优质便捷的市场接入通道。目前支持股票、基金、ETF、债券、期权等多个市场,可满足不同投资者需求。 基于 XTP 官方 C SDK,DolphinDB 开发了 X…

【IDEA】使用debug方式去运行java程序

什么是debug工具? 调试工具(debug工具)是一种用于帮助程序员识别和修复程序中的错误的工具。它们提供了一系列的功能,帮助程序员在代码执行的过程中跟踪和检测问题,例如查看变量的值、检查函数的调用栈、设置断点来停…

算法学习——LeetCode力扣动态规划篇2

算法学习——LeetCode力扣动态规划篇2 343. 整数拆分 343. 整数拆分 - 力扣(LeetCode) 描述 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得…

java: 找不到符号 符号: 变量 log

在以下位置加上该配置"-Djps.track.ap.dependenciesfalse"

文件操作(随机读写篇)

1. 铺垫 建议先看: 文件操作(基础知识篇)-CSDN博客 文件操作(顺序读写篇)-CSDN博客 首先要指出的是,本篇文章中的“文件指针”并不是指FILE*类型的指针,而是类似于打字时的光标的东西。 打…

C++:类的6大默认成员函数:赋值运算符重载

文章目录 赋值运算符重载1.1 运算符重载的引用1.2 运算符重载的概念1.3 赋值运算符重载总结一下(赋值运算符) 赋值运算符重载 1.1 运算符重载的引用 有一个日期类Date: class Date { public:Date(int year 1900, int month 1, int day 1){_year year;_month month;_da…

Rust使用feature特性和条件编译,以及常用feature使用说明

Cargo Feature 是非常强大的机制,可以为大家提供条件编译和可选依赖的高级特性,可以为你省下不少的代码量来判断操作系统和条件编译等功能。rust官方条件编译文档:Conditional compilation - The Rust Reference features特性 Featuure 可以…

GeometryInstance点击改变颜色

目录 项目地址实现效果核心代码 项目地址 https://github.com/zhengjie9510/webgis-demo 实现效果 核心代码 // Draw different instances each with a unique color const rectangleInstance new Cesium.GeometryInstance({geometry: new Cesium.RectangleGeometry({recta…

EFCore的空迁移(EFCore操作已存在的数据库表,不影响其中的数据)

背景:EFCore默认的会自动创建数据表,但是有时又是DBFirst,数据库写好了要用现成的表。这个时候就需要进行一些特殊的操作了 1、写出跟要对接数据库的实体类 比如我的表是这样创建的 create table mail_test (user_id bigint auto_increment …

【Entity Framework】EF中DbSet类详解

【Entity Framework】EF中DbSet类详解 文章目录 【Entity Framework】EF中DbSet类详解一、概述二、定义DbSet2.1 具有DbSet属性的DbContext2.2 具有 IDbSet 属性的 DbContext 2.3 具有 IDbSet 属性的 DbContext三、DbSet属性四、DbSet方法五、DbContext动态生成DbSet 一、概述 …

医院消防巡检系统革新:凡尔码平台二维码技术引领安全升级

医院消防巡检,传统依赖手工记录,效率和准确性受限。凡尔码平台的二维码消防巡检系统,以创新技术颠覆传统,实现即时、精准的安全管理,确保医院消防安全无虞。 凡尔码平台的消防巡检系统不仅提升了医院安全管理的效率&a…

基于SpringBoot + Vue实现的校园失物招领系统设计与实现+毕业论文

介绍 系统包含用户和管理员两个角色 用户:登录、注册、留言板、公告信息、失物招领、失物认领、寻物启事、个人中心、我发布的失物信息、我的失物认领、我发布的寻物启事、寻物启事留言等功能。 管理员:登录、基础数据管理、系统管理、留言板管理、失物信…
最新文章