leetcode 445. Add Two Numbers II(两数相加)

在这里插入图片描述

用链表代表2个数字,这2个数字相加的和用链表返回。
最高位在链表的head.

思路:

1.链表逆序

数字相加是从低位到高位的,然而链表中的数字是从高位指向低位。
所以涉及到链表的逆序。

逆序之后只需从head到tail把两个链表的数字相加,再用一个int表示进位。

链表的逆序:
最左边的数字逆序后应该是tail, 它的next指向null.
后面的数字每次都指向它的前一个数字。
所以用cur表示当前node, cur.next指向它前一个node,
然后cur移动到链表的下一节点,不停地把cur.next指向前一个node.

在把结果的数字一个一个地保存进结果的链表中时,
不断地把新数字指向前一个数字,就实现了从低位到高位保存的效果。

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode newHead = null;int carry = 0;l1 = reverseList(l1);l2 = reverseList(l2);while(l1 != null || l2 != null || carry > 0) {int num1 = (l1 != null ? l1.val : 0);int num2 = (l2 != null ? l2.val : 0);int sum = num1 + num2 + carry;int num = sum % 10;carry = sum / 10;ListNode cur = new ListNode(num);cur.next = newHead;newHead = cur;l1 = (l1 != null ? l1.next : null);l2 = (l2 != null ? l2.next : null);}return newHead;}ListNode reverseList(ListNode head) {ListNode pre = null;ListNode cur = head;while(cur != null) {ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}
}

在这里插入图片描述

2.Stack

如果不想用链表逆序,可以用Stack, 同样可以达到逆序的效果,但是速度不及上面的快。

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {Stack<Integer> st1 = new Stack<>();Stack<Integer> st2 = new Stack<>();ListNode res = null;int carry = 0;//相当于逆序链表while(l1 != null) {st1.push(l1.val);l1 = l1.next;}while(l2 != null) {st2.push(l2.val);l2 = l2.next;}while(!st1.empty() || !st2.empty() || carry > 0) {int num1 = st1.empty() ? 0 : st1.pop();int num2 = st2.empty() ? 0 : st2.pop();int sum = num1 + num2 + carry;int num = sum % 10;carry = sum / 10;ListNode cur = new ListNode(num);cur.next = res;res = cur;}return res;}

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

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

相关文章

Windows安装激活注意事项

选择语言、版本&#xff08;Windows 10指的是专业版本&#xff09;和体系结构&#xff08;32位/64位&#xff09;&#xff0c;这里自行根据情况选择&#xff08;如果机器预装的是Windows 10家庭中文版则选择家庭中文版&#xff0c;如果预装的是专业版则选择Windows 10。这样原先…

使用IDEA构建jar然后转执行程序exe的爬坑

https://download.csdn.net/download/leoysq/87939492 构建jar

划片机的作用将晶圆分割成独立的芯片

划片机是将晶圆分割成独立芯片的关键设备之一。在半导体制造过程中&#xff0c;晶圆划片机用于将整个晶圆切割成单个的芯片&#xff0c;这个过程被称为“晶圆分割”或“晶圆切割”。 晶圆划片机通常采用精密的机械传动系统、高精度的切割刀具和先进的控制系统&#xff0c;以确保…

018 - STM32学习笔记 - SPI读写FLASH(三)- 写入字符串、小数与整数

018 - STM32学习笔记 - SPI访问Flash&#xff08;三&#xff09;- 写入字符串、小数与整数 上节对Flash的跨页写入数据进行了完善&#xff0c;但是数据写入都是以Byte数组的方式进行写入&#xff0c;这节分别进行字符串的写入和小数整数的写入&#xff0c;本节内容对SPI的函数…

Storage、正则表达式

1 LocalStorage 2 SessionStorage 3 正则表达式的使用 4 正则表达式常见规则 5 正则练习-歌词解析 6 正则练习-日期格式化 Storage-Storage的基本操作 // storage基本使用// 1.token的操作let token localStorage.getItem("token")if (!token) {console.log(&q…

Spring的创建和使用

目录 Spring的创建1.创建一个普通的Maven项目2.添加spring框架支持3.添加启动类 存储Bean对象1. 创建Bean2.将Bean注册到容器当中 获取并使用Bean对象1.得到Spring上下文2. 获取指定Bean对象3. 使用Bean对象 总结 Spring 是⼀个包含了众多⼯具⽅法的 IoC 容器。那么它就具备以下…

CloudCompare——M3C2计算两点云之间的鲁棒距离

目录 1.概述2、计算原理3、操作流程 本文由CSDN点云侠原创&#xff0c;原文链接。爬虫网站请自重。 M3C2 (plugin) 1.概述 CloudCompare中的Plugins -> M3C2 Distance 功能是用来计算两组点云间的鲁棒距离的特别方法。从CloudCompare-2.9版开始&#xff0c;M3C2插件还包括…

隐私计算大会亮点前瞻:《隐私计算应用研究报告(2023年)》发布预告

7月26日&#xff0c;2023隐私计算大会将于青岛正式扬帆&#xff0c;本次大会将齐聚业内专家大咖共论行业最新进展&#xff0c;洞察未来发展趋势&#xff0c;共同推进隐私计算行业蓬勃发展。 本次大会将公开正式发布《隐私计算应用研究报告&#xff08;2023&#xff09;》、“隐…

leetcode 9 回文数

class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}int num x;int value 0;while(num > 0){value value * 10 num % 10;num num / 10;}return value x;} }

阿里云RockMQ与SpringBoot的整合

前言&#xff1a; 开源版本Rocket和商业版本的RocketMQ有些不同&#xff0c;研究的是商业版本的RocketMQ&#xff0c;阿里云的官方文档&#xff0c;感觉有点乱。看不咋明白&#xff0c;网上虽然有教程&#xff0c;大都还是有点缺少&#xff0c;有时候会突然跳了步骤&#xff0c…

Java 设计模式——观察者模式

目录 1.概述2.结构3.案例实现3.1.抽象观察者3.2.观察对象3.3.具体观察者3.4.具体观察对象3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——Observable / Observer6.1.Observable 类6.2.Observer 接口6.3.案例 1.概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#…

数据结构与算法——顺序表(顺序存储结构)及初始化详解

顺序表&#xff0c;全名顺序存储结构&#xff0c;是线性表的一种。通过《什么是线性表》一节的学习我们知道&#xff0c;线性表用于存储逻辑关系为“一对一”的数据&#xff0c;顺序表自然也不例外。 不仅如此&#xff0c;顺序表对数据的物理存储结构也有要求。顺序表存储数据…