大厂常见算法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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux实验 Shell编程

实验目的: 熟练掌握Shell程序的建立与执行;掌握Shell变量的两种类型(Shell环境变量和用户自定义变量)及其用法;掌握Shell中的特殊字符、算术与逻辑运算;掌握Shell中输入输出命令;掌握Shell程序…

学术共振 美妙发声 | 2024美沃斯大会完美收官,米兰柏羽倾力承办

5月10日-5月12日,为期3天的第十七届美沃斯医疗美容大会在杭州国际博览中心盛大举办,作为行业顶级学术交流平台,本届美沃斯大会不仅是医美行业的一次学术交流盛会,更是一次深度探讨行业未来的远眺之窗。 5月9日,即美沃…

Docker 安装 MySQL(Mac电脑M芯片)

Docker 安装 MySQL(Mac电脑M芯片) 1. 下载MySQL镜像文件2. 创建容器实例2.1 命令参数介绍 3. 容器实例内连接MySQL3.1 进入容器实例后台3.2 连接MySQL 4. DBeaver连接MySQL4.1 连接异常 1. 下载MySQL镜像文件 # 默认下载laster版本 docker pull mysql# …

MPEG-4 AVC/H.264高清编码器 JR3211P

概述 JR3211P MPEG-4 AVC/H.264高清编码器是一款专业的高清音/视频编码产品。该产品支持几乎所有模拟及数字音/视频输入接口,包括CVBS、YPbPr、S-video、SD/HD-SDI、HDMI视频输入接口、平衡模拟音频(XLR)、非平衡模拟音频(RCA&am…

百度云内容审核

百度云内容审核介绍 百度智能云内容审核平台:是一款针对多媒体内容进行智能审核的服务平台。支持对图像、文本、音频、视频、直播等内容进行安全审核,具有精准的审核模型、丰富的审核维度、灵活的规则配置等特点。通过可视化界面选择审核维度、个性化调整…

LabVIEW开发RS422通信

LabVIEW开发RS422通信 项目围绕LabVIEW软件开发的程序在RS422通信技术检测方面的应用进行展开,通过软件编程将上位计算机虚拟化为检测设备,控制其通信端口与被测产品进行RS422通信,以此检验产品的性能优劣。该虚拟检测仪器在实际测试中表现出…

Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

Go框架三件套:Gorm的基本操作

1.概述 这里的Go框架三件套是指 Web、RPC、ORM框架,具体如下: Gorm框架 gorm框架是一个已经迭代了10年的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。 Kitex框架 Kitex是字节内部的Golang微服务RPC框架,具有高性能…

Shell编程之循环语句

目录 一、for循环 for循环实操 二、while循环 while循环实操 三、until循环命令 until循环实操 一、for循环 读取不同的变量值,用来逐个执行同一组命 for 变量 in 取值列表 do 命令序列 done [rootlocalhost ~]# for i in 1 2 3 4 5 > do > echo "…

Android PreferenceActivity可以自动设置的Activity

1、介绍 PreferenceActivity 是一个抽象类,继承自ListActivity ,该类封装了SharedPreferences. PreferenceActivity 提供了一些常用的设置项如,与普通组件一样,这些配置项既可以从XML文件创建,也可以从代码创建. 每一个设置项标签有一个andro…

FRP多级内网穿透实验(虚拟机多级网络环境搭建+FRP工具使用)

0x00 实验背景 最近在工作中遇到了一个指定必须使用FRP作为内网穿透工具的活动,由于以前没有深入分析过多层内网的实验环境,对多级级联转发还不是很熟悉,在这里简单记录一下环境搭建与实验内容。 0x01 环境搭建 环境搭建以VM为为虚拟平台&…

Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版

Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版 Office LTSC 2024 for Mac 请访问原文链接:Microsoft Office for Mac 2024 (Office 365) 16.84 Universal 预览版,查看最新版。原创作品,转载请保留出处。 作者主页&a…