LeetCode2.两数相加

devtools/2024/9/23 3:01:53/

题目链接:

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

分析:这个题目和之前所做的数组求和问题大同小异,只不过增加了链表的情景,需要大家考虑链表中可能出现的情况而已,有兴趣的同学可以先看这个链接,实现了二进制的模拟求和,这个熟练以后再来看链表场景下的,效果会更好。LeetCode67. 二进制求和-CSDN博客

算法思路:设置一个结果链表,然后我们遍历题目中给出的两个链表,每次从链表中取出结点然后求和,再将和存入到结果链表中。在两个链表其中一个结束以后,我们再判断另一个不为空的链表,同样重复这个过程直到链表循环结束。要注意的是最后要判断进位是否为1,如果为1还需要再插入一个结点表示进位的情况;同时为了方便,建议使用尾插法,这样可以一次性返回正确的结果。具体大家可以看参考代码,注释写的也比较详细了。

参考代码

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* head=new ListNode(-1);//建立一个临时头结点 方便返回最后的结果ListNode* cur=head;//这里使用尾插法较好 可以直接返回正确结果 所以我们设置一个结点表示现在所到的位置int temp=0;//表示进位符的值while(l1&&l2){//开始遍历两个链表ListNode* p=new ListNode(-1);//新设置一个结点,存储该位求和的值并添加到结果链表中cur->next=p;cur=p;int a=l1->val,b=l2->val;//取出两个链表中的整数if(a+b+temp<10){//不存在进位的情况p->val=a+b+temp;temp=0;}else{//存在进位的情况p->val=(a+b+temp-10);temp=1;}l1=l1->next;//两个结点各自向后移动l2=l2->next;}//遍历结束后,可能存在两个链表中还有一个没有结束 所以我们继续遍历没有结束的那个while(l1){//遍历l1 思路同上ListNode* p=new ListNode(-1);cur->next=p;cur=p;int a=l1->val;if(a+temp<10){p->val=a+temp;temp=0;}else{p->val=(a+temp-10);temp=1;}l1=l1->next;}while(l2){//遍历l2 思路也同上ListNode* p=new ListNode(-1);cur->next=p;cur=p;int a=l2->val;if(a+temp<10){p->val=a+temp;temp=0;}else{p->val=(a+temp-10);temp=1;}l2=l2->next;}if(temp!=0){//两个链表都遍历结束后,还要继续判断进位是否为空,不为空则新开一位表示最高位的值ListNode* p=new ListNode(-1);cur->next=p;cur=p;p->val=1;}return head->next;//head为临时头结点,所以我们需要返回头结点的下一个结点}
};


http://www.ppmy.cn/devtools/44415.html

相关文章

618手把手教你捡漏服务器

618最全捡漏攻略 捡漏规则1、新人优惠⭐⭐⭐2、教育优惠⭐⭐3、回馈活动⭐️ ECS价格对比新人优惠&#x1f49d;京东云 50/年百度云 60.69/年阿里云 82/年腾讯云 99/年 回馈活动&#x1f381;阿里云 教育优惠&#x1f3eb;阿里云腾讯云 hi&#xff0c;好久不见各位&#xff0c;…

Linux学习笔记(epoll,IO多路复用)

Linux learning note 1、epoll的使用场景2、epoll的使用方法和内部原理2.1、创建epoll2.2、使用epoll监听和处理事件 3、示例 1、epoll的使用场景 epoll的英文全称是extend poll&#xff0c;顾名思义是poll的升级版。常见的IO复用技术有select&#xff0c;poll&#xff0c;epo…

SQL 语言:嵌入式 SQL 和动态 SQL

文章目录 基本概述嵌入式 SQL动态 SQL总结 基本概述 嵌入式SQL和动态SQL是两种在应用程序中嵌入和使用SQL语句的方法。它们都允许开发人员在编程语言中编写SQL语句&#xff0c;以便在应用程序中执行数据库操作。然而&#xff0c;这两种方法在实现方式、性能和灵活性方面存在一…

【Linux】初识Linux和Linux环境配置

1.什么是Linux操作系统 说到电脑系统 我想有大多数人会脱口而出&#xff1a;windows、mac 是的&#xff0c;这也是如今市场上主流的两种操作系统。 但是对于IT相关的人士来说&#xff0c;还有一种系统也是必须有姓名 那就是Linux Linux&#xff0c;Linux Is Not UniX 的…

vmware中Ubuntu虚拟机和本地电脑Win10互相ping通

初始状态 使用vmware17版本安装的Ubuntu的20版本&#xff0c;安装之后什么配置都要不懂&#xff0c;然后进行下述配置。 初始的时候是NAT&#xff0c;没动的. 设置 点击右键编辑“属性” 常规选择“启用”&#xff1a; 高级选择全部&#xff1a; 打开网络配置&#xff0c;右键属…

MFC工控项目实例之一主菜单制作

1、本项目用在WIN10下安装的vc6.0兼容版实现。创建项目名为SEAL_PRESSURE的MFC对话框。在项目res文件下添加相关256色ico格式图片。 2、项目名称&#xff1a;密封压力试验机 主菜单名称&#xff1a; 系统参数 SYS_DATA 系统测试 SYS_TEST 选择型号 TYP_CHOICE 开始试验 TES_STA…

vite5 +vue2 中非js jsx文件支持 jsx语法插件

plugin-vue2-jsx-vite5 该插件可以支持最新的vite5 vue2 非js & jsx文件中写入jsx语法解析 原官网的插件 vitejs/plugin-vue2-jsx 2023年已经停止维护vue2的内容了&#xff0c;需要社区去维护 使用 注意事项&#xff0c;node版本必须大于v20,不然项目运行会有其他问题…

cocos 屏幕点击坐标转换为节点坐标

let scPos event.getLocation(); let camera find(Canvas/Camera).getComponent(Camera).screenToWorld(new Vec3(scPos.x,scPos.y,0));//摄像机 let p this.node.getComponent(UITransform).convertToNodeSpaceAR(camera);//this.node为指定的节点为原点&#xff08;0,0&…