LeetCode:2. 两数相加

news2024/11/18 23:33:17

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

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

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

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

 

/**
 * 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) {}
 * };
 */

解1:

// 方法一
int len(ListNode* head) {
    int len = 0;
    while(head){
        head=head->next;
        len++;
    }
    return len;
}

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* p1=l1;
        ListNode* p2=l2;
        int len1,len2;
        len1 = len(p1);
        len2 = len(p2);
        int flag = 0;
        bool maxBool = 1;
        if(len1>=len2) {
            if(len1==len2)
                flag = 1;
        }else{
            p1=l2;
            p2=l1;
            maxBool=0;
        }

        // if(len1<len2){
        //     p1=l2;
        //     p2=l1;
        //     maxBool=0;
        // }
        // else if(len1==len2) {
        //     flag = 1;
        // }
        int tmpval=0;
        while(p1) {
            if(p2) {
                p1->val += p2->val;
                p2=p2->next;
            }
            p1->val += tmpval;
            if(p1->val >= 10) {
                tmpval = 1;
                p1->val -= 10;
            }else{
                tmpval = 0;
            }
            if(p1->next==nullptr && tmpval) {
                if(p1->val != 0 && !flag){
                    p1->val += tmpval;
                }else {
                    ListNode* tail =new ListNode;
                    p1->next = tail;
                }  
            }
            p1=p1->next;
        }
        return maxBool ? l1:l2;
    }
};

解:2:

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* p1=l1;
        ListNode* p2=l2;
        int flag = 0;
        ListNode* tail1,*tail2;
        int tmpval=0;
        while(p1 || p2) {
            if(!p1) {
                flag = 1;
                p1 = tail1->next = new ListNode;
            }
            if(!p2) {
                flag = 0;
                p2 = tail2->next = new ListNode;
            }
            p1->val += p2->val;
            p1->val += tmpval;
            if(p1->val >= 10) {
                tmpval = 1;
                // p1->val %= 10;
                p1->val -= 10;
            }else{
                tmpval = 0;
            }
            if(p1->next==nullptr && tmpval) {
                // if((p1->val % 10) != 0 && ((p2->next!=nullptr) && flag)){
                // if((p1->val % 10) != 0  && flag){
                // if((p1->val - 10)!= 0  && flag){
                if(p1->val!= 0  && flag){
                    p1->val += tmpval;
                }
                else {
                    ListNode* tail =new ListNode;
                    p1->next = tail;
                }  
            }
            if(!p1->next) tail1 = p1;
            if(!p2->next) tail2 = p2;
            p2 = p2->next;
            p1 = p1->next;
        }
        return l1;
    }
};

解3

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* head = nullptr;
        ListNode* cur = head;
        int t = 0;
        while(l1!=nullptr || l2!=nullptr) {
            int a = l1 == nullptr ? 0 : l1->val;
            int b = l2 == nullptr ? 0 : l2->val;
            int r = a + b + t;
            if(r >= 10) {
                r -= 10;
                t = 1;
            }else {
                t = 0;
            }
            if(!head) {
                head = new ListNode(r);
                cur = head;
            } else {
                cur->next = new ListNode(r);
                cur = cur->next;
            }
            l1 = l1 == nullptr ? nullptr : l1->next;
            l2 = l2 == nullptr ? nullptr : l2->next;
        }
        if(t !=0 ) {
            cur->next = new ListNode(t);
        }
        return head;
    }
};

LeetCode 官方解答:

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *head = nullptr, *tail = nullptr;
        int carry = 0;
        while (l1 || l2) {
            int n1 = l1 ? l1->val: 0;
            int n2 = l2 ? l2->val: 0;
            int sum = n1 + n2 + carry;
            if (!head) {
                head = tail = new ListNode(sum % 10);
            } else {
                tail->next = new ListNode(sum % 10);
                tail = tail->next;
            }
            carry = sum / 10;
            if (l1) {
                l1 = l1->next;
            }
            if (l2) {
                l2 = l2->next;
            }
        }
        if (carry > 0) {
            tail->next = new ListNode(carry);
        }
        return head;
    }
};

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

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

相关文章

Java学习笔记------抽象类和抽象方法

抽象方法 抽象方法&#xff1a;将共性的行为&#xff08;方法&#xff09;抽取到父类之后&#xff0c;由于每一个子类执行的内容是不一样的&#xff0c;所以&#xff0c;在父类中不能确定具体的方法体&#xff0c;该方法就可以定义为抽象方法抽象类&#xff1a;如果一个类中存…

d3.js 的使用

这篇文章相当于之前 svg 的补充。 因为 svg 代码肯定不是人为去专门写的。 在这里推荐制作 svg 的第三方库 - D3.js 用于定制数据可视化的JavaScript库 - D3 官网地址&#xff1a; D3 by Observable | The JavaScript library for bespoke data visualization 简单使用 画…

嵌入式基础知识-信息安全与加密

本篇来介绍计算机领域的信息安全以及加密相关基础知识&#xff0c;这些在嵌入式软件开发中也同样会用到。 1 信息安全 1.1 信息安全的基本要素 保密性&#xff1a;确保信息不被泄露给未授权的实体。包括最小授权原则、防暴露、信息加密、物理加密。完整性&#xff1a;保证数…

nginx-日志处理

access.log #正常请求的日志 error.log #访问错误日志&#xff0c;404&#xff0c;500等请求在这里 buffer&#xff1a;设置缓冲区&#xff0c;访问日志不会直接打到磁盘上&#xff0c;而是先积攒到缓冲区&#xff0c;缓冲区满了后在统一往…

H5打包APP和IOS实现免签,超级签,mam签,h5分发

博主技术笔记 博主开源微服架构前后端分离技术博客项目源码地址&#xff0c;欢迎各位star 微信公众号&#xff0c;每天给大家提供技术干货 http://yun.viphssp.top/root 打包出来的模板&#xff1a;https://yun.viphssp.top/mq/3/html/index.html

解决a标签内容中img标签和p标签垂直方向间隔太大的问题

现象如下&#xff1a; 对应的html结构&#xff1a; 解决办法&#xff1a;给a标签设置&#xff1a;display: inline-block和line-height属性。 然后问题解决&#xff1a; 具体原理如下&#xff08;由chatgpt回答&#xff09;&#xff1a; display: inline-block 可以减少垂直方…

java可以跨平台的原因是什么?

因为不同平台可以安装对应的JVM&#xff08;Java Virtual Machine&#xff09;&#xff0c;它是C/ C写的&#xff0c;JVM可以屏蔽所有和平台相关的信息&#xff0c;并帮助把Java文件经过编译后生成的和平台无关的class类文件&#xff08;也就是字节码&#xff09;从硬盘读取到内…

Java面试题(持续更新中)

一、Java基础集合多线程JVM 1.Java基础 1.1面向对象和面向过程的区别 面向过程&#xff1a;面向过程的性能比面向对象高。因为类调用时需要实例化&#xff0c;消耗比较大&#xff0c;比较消耗资源&#xff0c;所以当性能是最重要的考量因素的时候&#xff0c;比如单片机、Li…

内存卡数据恢复软件推荐,简直是高效恢复好帮手!

“朋友们在使用内存卡时有没有好的内存卡数据恢复软件推荐呀&#xff1f;我的内存卡对我来说真的很重要&#xff0c;但是我不小心把里面的数据删除了&#xff0c;我应该怎么做才能恢复里面的数据呢&#xff1f;” 内存卡为我们的生活提供了很多的便利&#xff0c;我们可以在里面…

输入时并未按照格式,没注意汉字符号

&#x1f388;问题现象&#xff1a; 运行出来的代码没得到想要的结果&#xff1a; &#x1f388;原因分析&#xff1a; 程序运行起来了&#xff0c;计算的结果是错误的&#xff0c;这个最好的解决办法就是调试&#xff0c;一步步的看代码在每个阶段的值是不是我们期望的&…

Qt学习记录___9.10

1.QtSvg初体验 #include <QtSvg> QSvgWidget w1;w1.load(QString(":/iconfont-gongyichongwu.svg"));QSvgRenderer *renderw1.renderer();qDebug()<<render->defaultSize();w1.resize(render->defaultSize());w1.show(); 2. 对话框实验。 QT之隐藏…

LNMP网站搭建

安装宝塔面板一键安装LNMP LNMP LNMP含义 L代表Linux 用来当作程序运行的系统平台 N代表Nginx 用来提供WEB网页服务 M代表Mysql 用来存储管理网站数据 P代表PHP 用来处理动态资源 LNMP搭建方法 1. yum安装依赖环境 yum -y install pcre-devel zlib-devel gcc gcc-c make安…

Cascade-MVSNet CVPR-2020 学习笔记总结 译文 深度学习三维重建

文章目录 4 Cascade-MVSNet CVPR-20204.0 主要特点4.1 背景介绍4.2 代价体构造回顾4.3 Cascade-MVSNet4.4 Loss的设置4.5 Cascade-MVSNet实战操作4.6 总结4 Cascade-MVSNet CVPR-2020 深度学习三维重建 cascade-MVSNet-CVPR-202(源码、原文、译文 )下载 4.0 主要特点 采用特…

一阶高通滤波器(博途SCL代码)

高通滤波器与低通滤波器刚好相反,允许信号的高频分量通过,可以和低通滤波器组合使用,组成带通滤波器。一阶低通滤波器相关算法介绍,可以查看下面文章链接: PLC信号处理系列之一阶低通(RC)滤波器算法_plc滤波算法程序_RXXW_Dor的博客-CSDN博客1、先看看RC滤波的优缺点 优点…

C#中的IQueryable vs IEnumerable (二)

概要 在前面的文章中&#xff0c;本人曾经分析了IQueryable和 IEnumerable两个接口的异同点。但是整个分析过程&#xff0c;侧重于基本概念层面&#xff0c;本文从设计和代码应用的角度来分析它们的区别。 现象讨论 相比于IEnumerable&#xff0c;IQueryable多了一个Express…

4.k8s部署私人仓库并且部署java服务案例

文章目录 前言一、搭建私人仓库1.1 拉取仓库镜像1.2 创建一个文件夹用来放用户名密码,然后在新创建一个账户1.3 Registry服务默认会将上传的镜像保存在容器的/var/lib/registry&#xff0c;我们将主机的/opt/registry目录挂载到该目录&#xff0c;即可实现将镜像保存到主机的/o…

多线程-锁的种类

1 作用 Java中的锁主要用于保障多并发线程情况下数据的一致性。在多线程编程中为了保障数据的一致性&#xff0c;我们通常需要在使用对象或者方法之前加锁&#xff0c;这时如果有其他线程也需要使用该对象或者该方法,则首先要获得锁,如果某个线程发现锁正在被其他线程使用,就会…

案例研究|农业信息化企业天演维真的堡垒机选型思路与落地实践

浙江天演维真网络科技股份有限公司&#xff08;以下简称为“天演维真”&#xff09;成立于2004年&#xff0c;是中国领先的乡村振兴数字化服务整体解决方案提供商。作为中国品牌农业信息化服务的先行者、中国农产品数字身份识别技术开创者&#xff0c;天演维真的产品已助力全国…

【Python】Python基础语法

总感慨万千&#xff0c;虽只道寻常 文章目录 前言1. python与Java的主要区别2. 数据类型3. 输入与输出3.1 输入3.2 输出 4. 注释5. 运算符6. 条件语句7. 循环8. 函数9. 列表9.1 创建9.2 根据下标访问元素9.3 列表切片9.4 遍历9.5 插入元素9.6 查找元素下标9.7 删除元素9.8 列表…

Spring Boot - Junit4 / Junit5 / Spring Boot / IDEA 关系梳理

文章目录 PreJunit4 / Junit5 / Spring Boot / IDEAIDEA版本Spring-Boot-Older-Release-NotesSpringBootTest 起源 & Spring-Boot-1.4-Release-Notes2.0.0.RELEASE ----- 2.0.9.RELEASE2.1.0.RELEASE ----- 2.1.18.RELEASE2.2.0.RELEASE ~ 2.2.13.RELEASE2.3.0.RELEASE ~ 2…