稀碎从零算法笔记Day22-LeetCode:

题型:链表

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

来源:Le'e't

题目描述

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

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

你可以假设除了数字 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
  • 题目数据保证列表表示的数字不含前导零

题目思路

少有的【简单的中等题】

样例很清晰,感觉就是链表版的模拟各数累加。

笔者这边直接在原链表上进行操作,如果题目要求【不改变原链表结构】,可以自己开一个新的链表。

为了便于操作,笔者这里强行让链表1为长链表。然后可以分情况:①等长时 ②不等长时。

考虑到【进位】,可以创一个int来存一下,但要记得【进位加完一次后归零】。

等长时:遍历两个链表,指针同步走。如果最终加完后还有进位,需要创一个新结点来作为尾结点。(笔者这里事先接收了尾指针,方便操作)

不等长时,就是先按着等长来走。短的链表走到头后长链表自己一个人走(我哭死)

C++代码

笔者已经哭死了,所以上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:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *temp1 = l1,*temp2 = l2;
        int len1=0,len2=0;
        int i=0,j=0;

        while(temp1 != NULL)    
            {
                len1++;
                temp1 = temp1->next;
            }
        while(temp2 != NULL)    
            {
                len2++;
                temp2 = temp2->next;
            }
        //保证l1一定是长链表 
        if(len1 < len2)
        {
            swap(len1,len2);
            swap(l1,l2);
        }
        int sum=0;
        ListNode *ans = l1;
        ListNode * us;
        while(l1 != NULL &&l2 != NULL)
        {
            if(l1 ->next == NULL)
                us = l1;
            int tempa=l1->val,tempb=l2->val,tempc=sum;
            l1->val = (l1->val + l2->val + sum)%10;
            sum = 0;
            sum+=((tempa+tempb+tempc)/10);
            l1 = l1->next;
            l2 = l2->next;
        }
        while(l1 != NULL)
        {    
            if(l1 ->next == NULL)
                us = l1;
            int tempa=l1->val,tempc=sum;
            l1->val = (l1->val + sum)%10;
            sum=0;
            sum+=(tempa+tempc)/10;
            l1 = l1->next; 
        }
        if(l1 == NULL && sum !=0)
        {
            ListNode * fin = new ListNode(sum);
            us->next = fin;
        }

        return ans;
    }
};

结算页面

有待优化,感觉冗余的代码有些多。

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

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

相关文章

如何在Linux系统中确定CPU架构

在Linux环境中&#xff0c;了解系统所采用的CPU架构对于安装兼容软件、配置系统性能优化等方面至关重要。本文将介绍三种简单有效的方法来查询Linux系统的CPU架构。 方法1&#xff1a;使用lscpu命令 运行如下命令&#xff0c;可以快速获取CPU架构信息&#xff1a; lscpu | g…

Python内置对象

Python是一种强大的、动态类型的高级编程语言&#xff0c;其内置对象是构成程序的基础元素。Python的内置对象包括数字、字符串、列表、元组、字典、集合、布尔值和None等&#xff0c;每种对象都有特定的类型和用途。 01 什么是内置对象 这些对象是编程语言的基础构建块&…

Linux环境变量【终】

&#x1f30e;环境变量 文章目录&#xff1a; 环境变量 环境变量的组织方式 创建自己的环境变量       main函数参数       C语言提供的变量与接口 环境变量与本地变量 了解本地变量       取消本地变量和环境变量 环境变量的出处 总结 前言&#xff1a; 上…

Css提高——Css3盒子模型border-box

1、盒子模型的种类与区别 CSS3 中可以通过 box-sizing 来指定盒模型&#xff0c;有2个值&#xff1a;即可指定为 content-box、border-box&#xff0c;这样我们 计算盒子大小的方式就发生了改变。 CSS3 盒子模型 可以分成两种情况&#xff1a; 1. box-sizing: content-box 盒…

【机器学习智能硬件开发全解】(九)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的预处理过程】

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 机器学习智能硬件开发全解 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; C语言程序的预处理过程是在编译阶段之前进行的&#x…

UE5中各类型的英文名称缩写(直接用于文件前缀)

真正开发项目时用到的素材文件是相当巨量的&#xff0c;在资产中查找时由于不区分文件夹&#xff0c;因此查找是比较头疼的&#xff0c;所以很多同类型的文件名命名时要加入缩写。 本文提供初学者内容包中的缩写&#xff0c;并会在此后陆续加入自定义的缩写&#xff08;本部分…

css实现的3D立体视觉效果鸡蛋动画特效

这是一个基于纯css实现的3D立体视觉效果鸡蛋动画特效&#xff0c;喜欢的朋友可以拿来使用演示动态效果 css实现的3D立体视觉效果鸡蛋动画特效

Intellij IDEA--解决git的master分支不能force push的问题

原文网址&#xff1a;Intellij IDEA--解决git的master分支不能force push的问题-CSDN博客 简介 本文介绍Intellij IDEA怎样解决git的master分支不能force push的问题。 问题复现 解决方法 把保护分支里删除master

[AIGC] MySQL与PostgreSQL:两种流行的数据库系统的对比

数据库是存储和查询数据的重要工具。在选择数据库时&#xff0c;两个经常被考虑的选项都是开源的&#xff1a;MySQL和PostgreSQL。这两个数据库都与许多应用程序一起使用&#xff0c;但它们在某些方面存在显著的不同。在本文中&#xff0c;我们将比较MySQL和PostgreSQL的一些关…

路由器怎么做端口映射

路由器在网络中起到了连接不同设备和提供网络服务的重要作用。端口映射是一项常见的操作&#xff0c;它允许外部网络中的设备通过路由器访问内部网络中的设备。我们将介绍如何在路由器上进行端口映射的设置。 理解端口映射 在开始操作之前&#xff0c;我们需要了解一些基本概念…

Android Studio配置buildTypes{}后,gradle中Tasks列表不显示assembleRelease。

打开Files → Settings → Experimental 取消选中 "Do not build Gradle task list during Grafle sync"

Redis之缓存穿透、缓存雪崩、缓存击穿

Redis之缓存穿透、缓存雪崩、缓存击穿 什么是缓存穿透&#xff1f; 如果有人故意将请求打到未缓存的数据上&#xff0c;会对数据库造成巨大的压力 如何解决&#xff1f; 做好参数校验&#xff0c;比如请求的id不能<0&#xff0c;在访问数据库前就把这些异常访问拦截了 缓…

幼犬狗粮和成年犬狗粮该怎么挑选?

亲爱的狗友们&#xff0c;我们都知道&#xff0c;给狗狗选择适合的狗粮是非常重要的。那么&#xff0c;面对市面上琳琅满目的幼犬狗粮和成年犬狗粮&#xff0c;我们该如何挑选呢&#xff1f;别担心&#xff0c;接下来就让我来给大家支支招。 &#x1f436; 幼犬狗粮挑选篇 &…

【测试开发学习流程】MySQL函数运算(中)(下)

前言&#xff1a; 这些天还要搞毕业论文&#xff0c;东西少了点&#xff0c;大家将就看看QWQ 目录 1 MySQL的数据处理函数 1.1 文本处理函数 1.2 日期与时间函数 1.3 数值处理函数 1.4 系统函数 2 聚集运算 2.1 聚集函数 2.2 流程函数 1 MySQL的数据处理函数 MySQL支…

机器学习 - 训练模型

接着这一篇博客做进一步说明&#xff1a; 机器学习 - 选择模型 为了解决测试和预测之间的差距&#xff0c;可以通过更新 internal parameters, the weights set randomly use nn.Parameter() and bias set randomly use torch.randn(). Much of the time you won’t know what…

Unity 实现双屏或多屏内容展示

在某些应用场景&#xff0c;一个应用可能需要使用多个显示器显示。 Unity支持最多8个不同显示器同时显示应用程序中八个摄像头的视图&#xff0c;如下图&#xff1a; 具体实现如下&#xff1a; 1、在Hiearchy面板上点击鼠标右键->Camera,创建多一个Camera,如图&#xff1a…

postman 用上一个请求的响应体中的字段设置下一个请求的请求参数

文章目录 IntroPostman usagePre-request ScriptTests javascripts API Intro 这一切都是为了增加自动化动作所占的比例&#xff08;减少人手工操作复制粘贴可能会造成的错误&#xff09;。 Postman usage 最常用的&#xff1a;选HTTP方法类型、写URL&#xff0c;在Headers中…

EvaRichter勒索病毒来袭

目前勒索病毒仍然是全球最大的威胁&#xff0c;最近一年针对企业的勒索病毒攻击越来越多&#xff0c;大部分勒索病毒是无法解密的&#xff0c;并且不断有新型的勒索病毒出现&#xff0c;各企业一定要保持高度的重视&#xff0c;马上放假了&#xff0c;一款新型勒索病毒来袭....…

【Linux】编译器-gcc/g++的使用(预处理、编译、汇编、连接)

目录 01.预处理&#xff08;宏替换&#xff09; 02.编译&#xff08;生成汇编&#xff09; 03.汇编&#xff08;生成机器可识别码&#xff09; 04.连接&#xff08;生成可执行文件或库文件&#xff09; 05.选项 编译器在编译代码时包含以下四个步骤&#xff1a;1.预处理 2…

数据结构(三)复杂度的深层次剖析

之前发布了数据结构&#xff08;一&#xff09;&#xff0c;很多同学反响不够清晰&#xff0c;那今天就发一篇对复杂度专题的博客&#xff0c;希望对大家理解复杂度提供一些帮助。 时间复杂度 我们先来一个理解一个复杂度&#xff0c;二分查找的复杂度&#xff08;之前写过二…
最新文章