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

news2024/10/6 6:48:30

开头.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

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

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

相关文章

基于单片机的直流电机测速装置研究与设计

摘要: 基于单片机的直流电机测速装置采用了对直流电机的中枢供电回路串联取样电阻的方式实现对电机转速的精确实时测量。系统由滤波电路、信号放大电路、单片机控制电路以及稳压电源等功能模块电路构成。工作过程中高频磁环作为载体,利用电磁感应的基本原理对直流电…

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

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

面试题:调整数字顺序,使奇数位于偶数前面

题目: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分 算法1: 利用快速排序的一次划分思想,从2端往中间遍历 时间复杂度&#x…

【漏洞复现】泛微OA E-Cology ResourceServlet文件读取漏洞

漏洞描述: 泛微OA E-Cology是一款面向中大型组织的数字化办公产品,它基于全新的设计理念和管理思想,旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology ResourceServlet存在任意文件读取漏洞,允许未经授权的用户…

网络安全之OSPF进阶

该文针对OSPF进行一个全面的认识。建议了解OSPF的基础后进行本文的一个阅读能较好理解本文。 OSPF基础的内容请查看:网络安全之动态路由OSPF基础-CSDN博客 OSPF中更新方式中的触发更新30分钟的链路状态刷新。是因为其算法决定的,距离矢量型协议是边算边…

【java-数据结构14-双向链表的增删查改2】

上一篇文章中,我们已经对双向链表进行一些基本操作,本篇文章我们继续通过对链表的增删查改来加深对链表的理解~同时有任何不懂的地方可以在评论区留言讨论,也可以私信小编~觉得小编写的还可以的可以留个关注支持一下~话不多说正片开始~ 注意…

「JavaEE」多线程案例分析3:线程池

🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! 线程池 🍉简介🍉标准库中的线程池🍉Executors🍉实现一个简单的线程池 🍉简介…

初始Django

初始Django 一、Django的历史 ​ Django 是从真实世界的应用中成长起来的,它是由堪萨斯(Kansas)州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…

识别AI论文生成内容,降低论文高AI率

AI写作工具能帮我们在短时间内高效生成一篇毕业论文、开通报告、文献综述、任务书、调研报告、期刊论文、课程论文等等,导致许多人开始使用AI写作工具作为撰写学术论文的辅助手段。而学术界为了杜绝此行为,开始使用AIGC检测系统来判断文章是由AI生成还是…

机器学习中的聚类

目录 认识聚类算法 聚类算法API的使用 聚类算法实现流程 聚类算法模型评估 认识聚类算法 聚类算法是一种无监督的机器学习算法。 它将一组数据分成若干个不同的群组,使得每个群组内部的数据点相似度高,而不同群组之间的数据点相似度低。常用的相似…

【3dmax笔记】028:倒角的使用方法

一、倒角描述 在3dmax中创建倒角效果可以通过多种方法实现,以下是几种常见的方法: 使用倒角修改器。首先创建一个图形(如矩形和圆),然后对齐它们,将它们转化为可编辑样条线,并附加在一起,选择要倒角的边缘,然后使用倒角修改器来调整高度、轮廓等参数。使用倒角剖面修…

Davinci工程vBaseEnv模块讲解

配合的模块 要正常使用vBaseEnv模块,要同时使能EcuC、OS、vBRS和vLinkGen模块。 OS是操作系统,除了FBL以外,其他都需要用到OS。 vBaseEnv是基础环境 vBRS是基本运行系统 vLinkGen脚本链接生成器 EcuC是ECU配置 EcuC配置 需要配合vBaseEnv模…

程序员的神奇应用:从代码创造到问题解决的魔法世界之持续集成/持续部署

文章目录 持续集成/持续部署 在软件开发的海洋中,程序员的实用神器如同航海中的指南针,帮助他们导航、加速开发、优化代码质量,并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。 在当今数字化的世界里&…

数字水印 | Arnold 变换的 Python 代码实现

🥭 参考博客: Arnold 阿诺德置乱(猫脸变换)图像盲水印注入预处理(Python) 1 回顾:Arnold 公式 A r n o l d \mathsf{Arnold} Arnold 变换公式如下: [ x n 1 y n 1 ] [ 1 b a a b…

搜索引擎的设计与实现(二)

目录 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.检索器(Searcher) 4.用户接口(UserInterface) 3.2搜索引擎的详细工作流程 4 系统分析与设计 4.1系统分析 4.2系统概要设计 4.2系统实现目标 前面内容请移步 搜索引…

力扣HOT100 - 70. 爬楼梯

解题思路&#xff1a; 动态规划 注意 if 判断和 for 循环 class Solution {public int climbStairs(int n) {if (n < 2) return n;int[] dp new int[n 1];dp[1] 1;dp[2] 2;for (int i 3; i < n; i) {dp[i] dp[i - 1] dp[i - 2];}return dp[n];} }

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

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

智能组网实施步骤?

随着信息技术的快速发展&#xff0c;智能组网正在逐渐成为各个行业的关注焦点。智能组网通过将各种设备、终端和系统连接起来&#xff0c;实现信息的传输和共享&#xff0c;从而提升工作效率和运营效益。本文将介绍智能组网的实施步骤&#xff0c;以及一家名为【天联】的智能组…

台式电脑屏幕亮度怎么调节?让你的眼睛更舒适!

在日常使用台式电脑时&#xff0c;调节屏幕亮度是一项常见的需求。不同的环境和个人偏好可能需要不同的亮度设置。因此&#xff0c;了解台式电脑屏幕亮度怎么调节是非常重要的。本文将介绍三种常见的方法&#xff0c;帮助您轻松调节台式电脑屏幕亮度&#xff0c;以满足您的需求…

【C++初阶】第十一站:list的介绍及使用

目录 list的介绍及使用 1.list的含义 2.list的介绍 3.list的使用 1.list的构造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾删 和 头插头删 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…