当前位置: 首页 > news >正文

两数相加的问题

题目是:给两个非空的链表,表示两个非负整数。它们每位数都是按照逆序的方式存储,并且每一个节点只能存储一位数字。现在两个数相加,并且以相同的形式返回一个表示和的链表

首先回顾一下,什么是链表?链表是一种数据结构,由一系列的节点组成,每一个节点有两个部分:一部分是存储数据元素,一部分是存储下一个节点地址的指针。

在解答这个题目过程中还运用到进位,进位是一种运算形式,加法运算中,每一数位上的数相加满十,则用一个高位上的数记其和1

既然是链表运算,就先定义一个链表节点的构造函数:

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

在运算的函数里面,首先要定义一个头节点:

let Head = new ListNode(0);

定义一个表示当前节点的变量:

let current = Head;

进位标志为:

let carry = 0;

遍历链表:

while (l1 !== null || l2 !== null) { // 当两个链表中任意一个不为空时继续循环let n1 = l1 === null ? 0 : l1.val; // 若l1为空,则取值为0let n2 = l2 === null ? 0 : l2.val; // 若l2为空,则取值为0let sum = n1 + n2 + carry; // 计算当前位和进位之和carry = Math.floor(sum / 10); // 计算新的进位current.next = new ListNode(sum % 10); // 创建新节点,并设置其值为和除以10的余数current = current.next; // 移动到下一个节点if (l1 !== null) l1 = l1.next; // 移动l1指针if (l2 !== null) l2 = l2.next; // 移动l2指针}

如果进位标志大于0,那就在链表后面添加一个新的节点:

  if (carry > 0) {current.next = new ListNode(carry);}

最后返回链表。

完整代码如下:

class ListNode {constructor(val, next = null) {this.val = val;this.next = next;}
}/*** @param {ListNode} l1* @param {ListNode} l2* @return {ListNode}*/
var addTwoNumbers = function(l1, l2) {
let dummyHead = new ListNode(0); // 创建一个虚拟头节点let current = dummyHead; // 当前节点指针,初始指向虚拟头节点let carry = 0; // 进位标志while (l1 !== null || l2 !== null) { // 当两个链表中任意一个不为空时继续循环let n1 = l1 === null ? 0 : l1.val; // 若l1为空,则取值为0let n2 = l2 === null ? 0 : l2.val; // 若l2为空,则取值为0let sum = n1 + n2 + carry; // 计算当前位和进位之和carry = Math.floor(sum / 10); // 计算新的进位current.next = new ListNode(sum % 10); // 创建新节点,并设置其值为和除以10的余数current = current.next; // 移动到下一个节点if (l1 !== null) l1 = l1.next; // 移动l1指针if (l2 !== null) l2 = l2.next; // 移动l2指针}// 如果最后还有进位,则在链表末尾添加一个新的节点表示这个进位if (carry > 0) {current.next = new ListNode(carry);}return dummyHead.next;
};
http://www.lryc.cn/news/310607.html

相关文章:

  • 微信小程序的单位
  • 软考通过率真的低吗?
  • 国际视频编解码标准提案下载地址
  • 程序员是如何看待“祖传代码”的?
  • Python爬虫之爬取并下载哔哩哔哩视频
  • python 脚本设置输出颜色
  • 安卓websocket(客服端和服务端写在app端) 案例
  • C++面试宝典第34题:整数反序
  • 微信商城小程序设计
  • 如何合理布局子图--确定MATLAB的subplot子图位置参数
  • 【MySQL】基于Docker搭建MySQL一主二从集群
  • k8s 集群调度,标签,亲和性和反亲和性,污点和容忍,pod启动状态 排错详解
  • Idea 启动报错 failed to create jvm:jvm path url
  • 20款Visual Studio实用插件推荐
  • 基于SpringBoot的在线拍卖系统
  • “互动+消费”时代,借助华为云GaussDB重构新零售中消费逻辑
  • AI大全-通往AGI之路
  • CSS中如何解决 1px 问题?
  • IO 与 NIO
  • YOLOv应用开发与实现
  • 【C语言】熟悉文件基础知识
  • 信息系统安全与对抗-作业2
  • 【软考高项】【计算专题】- 5 - 进度类 - 横道图/甘特图
  • Ubuntu20.04使用XRDP安装原生远程桌面
  • uniapp:启动图 .9png 制作教程
  • NVMFS5113PLWFT1G汽车级功率MOSFET 60V 10A/64A满足AEC-Q101标准
  • 设计表时,如何选择正确的数据类型
  • iZotope RX 7 Advanced:音频修复与编辑的巅峰之作
  • Mac 制作可引导安装器
  • 深入了解 JavaScript 混淆加密和环境检测