大厂常见算法50题-两数相加

开头.gif

专栏持续更新50道算法题,都是大厂高频算法题,建议关注, 一起巧‘背’算法!

文章目录

  • 题目
  • 解法
  • 总结

题目

image.png

解法

  1. 定义一个节点pre,用于初始化结果链表的头部,cur指向pre,它将在遍历过程中用于构建新的链表。
  2. 初始化进位变量carry为0,用于记录每次相加后可能的进位。
  3. 使用一个while循环,当至少有一个链表不为空时继续执行。在循环中:
    1. 获取当前链表节点的值,如果链表为空,则赋值为0。
    2. 计算两个节点值与carry的和sum。
    3. 更新carry,将sum除以10的结果作为新的进位。
    4. 将sum对10取模的结果作为新节点的值,创建新节点并连接到cur的下一个节点。
    5. 更新cur指针,使其指向新创建的节点。
    6. 如果l1不为空,移动l1到下一个节点;如果l2不为空,移动l2到下一个节点。
  4. 循环结束后,检查carry是否为1,如果是,表示还有进位,需要添加一个新的节点到cur后面。
  5. 返回结果链表的头部,即pre.next。
public class AddTwoNumbers {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode cur = pre;
        int carry = 0;
        while (l1 != null || l2!=null){
            // 取出当前节点的值
            int x = l1 == null ? 0 : l1.val;
            int y = l2 == null ? 0 : l2.val;

            // 算出两数相加的值
            int sum = x + y + carry;

            // 算出需要进位的值
            carry = sum / 10;

            // 算出下一个节点的值
            sum = sum%10;

            // 移动节点
            cur.next = new ListNode(sum);
            cur = cur.next;
            if (l1 != null){
                l1 = l1.next;
            }
            if (l2 != null){
                l2 = l2.next;
            }
        }

        // 如果carry最后为1,表示还要进位,加一个节点
        if (carry == 1){
            cur.next = new ListNode(carry);
        }

        return pre.next;
    }

}

class ListNode {
  int val;
  ListNode next;
  ListNode() {}
  ListNode(int val) {
      this.val = val;
  }
  ListNode(int val, ListNode next) {
      this.val = val;
      this.next = next;
  }
}

总结

在处理链表问题并需要返回新链表的头节点时,通常会先创建一个pre指针。这个pre指针的作用是作为辅助,它的下一个节点是指向实际新链表的头节点head。这是因为,在构建链表过程中,为了防止原始头节点在不断创建新节点和移动指针时被覆盖或丢失,我们使用pre来保持对新链表起点的引用。这样,在链表构建完毕后,可以通过pre.next来准确地获取并返回最终的新链表头节点。

结尾.gif

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

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

相关文章

微服务部署不迷茫:4大部署模式深度解析,轻松驾驭云原生时代

微服务部署最全详解(4种常见部署模式) 微服务多实例部署 每个微服务都独立部署在自己的运行环境中,这是微服务架构的核心思想。 一般会采用每个主机多个服务实例,如下所示: 这是一种传统的应用部署方法,每个服务实例在一个或多个…

腐烂的橘子BFS

题目: 腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子…

FMEA再什么情况下应用——SunFMEA软件

FMEA作为一种系统性的方法,旨在识别和评估潜在的故障模式、其可能的影响以及相应的预防措施,因此,它的适用场景广泛且多样。今天SunFMEA软件系统和大家一起探讨什么情况下应用FMEA? 首先,在产品设计阶段,F…

对比分析汽车灯罩材料使用聚碳酸酯(PC)和PMMA(亚克力)的优缺点,汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

对比分析汽车灯罩材料使用聚碳酸酯(PC)和PMMA(亚克力)的优缺点,并给出建议。 要求: 1. 对比分析两种材料的性能、成本、耐用性、安全性等方面的差异。 2. 给出针对不同应用场景(如夜间照明…

通过GRE隧道实现OSPF、BGP、IS-IS的套接使用

正文共:999 字 9 图,预估阅读时间:1 分钟 书接上文(专线入云场景能否配置动态路由协议?),我们发现通过一定的配置,具体就是组合使用IBGP和静态路由,在使用云专线接入到资…

应用层(上篇)

应用层 应用层协议原理 网络应用程序体系解构 应用程序体系结构: 由应用程序研发者设计规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一:客户-服务器体系结构或对等…

快解析Tplink端口映射如何设置

Tplink作为国内知名路由器品牌,有着广泛的用户群体。使用快解析端口映射是实现内网服务器被外网访问必须要做的设置,很多对网络不懂得小白不知道该到哪里去做,下面我就讲解一下tplink路由器如何做端口映射。 1:访问路由器 &#…

Co-Driver:基于 VLM 的自动驾驶助手,具有类人行为并能理解复杂的道路场景

24年5月来自俄罗斯莫斯科研究机构的论文“Co-driver: VLM-based Autonomous Driving Assistant with Human-like Behavior and Understanding for Complex Road Scenes”。 关于基于大语言模型的自动驾驶解决方案的最新研究,显示了规划和控制领域的前景。 然而&…

通过钉钉卡片进行工单审批

我们通常通过钉钉机器人来发送通知,提醒审批人名下有待办工单需要处理。这种通知方式仅能提醒审批人到ITSM中处理,审批人需要打开电脑登陆平台处理,我们就考虑是否能有一种方式能够满足移动端审批? 这里我们可以使用ITSM的移动端版…

使用Flask部署Web应用:从入门到精通

文章目录 第一部分:准备工作第二部分:部署Flask应用到AWS部署到AWS Lambda 第三部分:部署Flask应用到腾讯云服务器部署到腾讯云服务器 第四部分:优化和扩展结论 在现代软件开发中,Web应用的部署是一个至关重要的环节。…

前端铺子-uniapp移动端:跨平台开发新篇章

一、引言 在移动应用开发领域,随着技术的不断进步,用户对应用的需求也日益多样化。如何快速、高效地开发跨平台应用成为了前端开发者面临的一大挑战。uni-app作为一款使用Vue.js开发所有前端应用的框架,凭借其一次编写、多端运行的特性&…

LaTeX 2024软件安装教程(附软件下载地址)

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! LaTeX 2024是一款基于ΤΕΧ技术的专业排版系统,特别适用于制作科技和数学文档,输出高品质印刷效果。它不仅能处理学术报告、…

一篇文章拿下Redis 通用命令

文章目录 Redis数据结构介绍Redis 通用命令命令演示KEYSDELEXISTSEXPIRE RedisTemplate 中的通用命令 本篇文章介绍 Redis 的通用命令, 通用命令在 Redis 的所有数据类型下都使用, 学好通用命令可以让我们更好的使用 Redis. Redis数据结构介绍 Redis 是一个key-value的数据库&…

cookie、session、token、表单、json、jsonp、websocket、ajax都是什么

前后端数据交互的几种方式 1.cookie Cookie是服务器保存在客户端的一小段数据,(使用Cookie的前提是客户端浏览器允许使用Cookie并对此做出相应的设置。) cookie是一种存储在用户计算机上的小型数据文件,常用于在web应用程序中跟…

postgis导出shp中文乱码

使用postgis导出shp数据,发现中文内容乱码 网上搜到的解决方案,都是添加环境变量PGCLIENTENCODINGGBK 但是添加之后,不仅没有解决我的问题,反而导出直接报错了 经过个人简单分析之后,发现这个应该跟导入的数据编码格…

Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)

宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是…

ALV 可编辑性(二)

前言 前面介绍了Abap ALV的整体可编辑、列可编辑和单元格可编辑,但是有时会有根据行项目某个字段的值来控制其他单元格的可编辑性的需求,其中还涉及到ALV刷新的功能。 实战 单元格数据修改后自动刷新 单元格中的数据被修改后,将ALV单元格中的…

人工智能|深度学习——PlotNeuralNet简单教程

一、简介 PlotNeuralNet是一个强大的开源Python库,它专为简化和美化神经网络图的绘制而设计 二、安装 需要下载的工具包括:MikTeX,Python代码编辑器(这个肯定会有的吧),Git bash(可选)&#xff…

【设计模式】JAVA Design Patterns——Abstract-document(抽象文档模式)

🔍 目的 使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。 🔍 解释 抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口 真实世界例子 考虑由多个部…

O2OA翱途开发平台前端API和后端API的访问以及使用

O2OA是一个高度可定制化的企业级开发平台,它的API(应用程序接口)分为前端和后端,各自有不同的用途,平台为用户开放了全部的后端API供开发者使用,开发者可以根据各类API组织出符合实际业务需求的新服务或者新…