Leetcode刷题100天—2. 两数相加( 链表)—day60
【摘要】 前言:作者:神的孩子在歌唱大家好,我叫智 2. 两数相加难度中等6851收藏分享切换为英文接收动态反馈给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6...
前言:
作者:神的孩子在歌唱
大家好,我叫智

2. 两数相加
难度中等6851收藏分享切换为英文接收动态反馈
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
- 每个链表中的节点数在范围
[1, 100]内 0 <= Node.val <= 9- 题目数据保证列表表示的数字不含前导零
package 链表;
/*
* https://leetcode-cn.com/problems/add-two-numbers/
* 我的问题:这道题我用了太多if和else,看了官方题解发现还可以简化,后面再慢慢分析,不过思路差不多
* 1. 如果两个链表不为空就相加遍历,如果相加有进制就存在carry里面让后面节点加上就可以了
* 2. 如果一个链表遍历完了那就遍历另一个链表,也得要判断carry是否为1
*/
public class _2_两数相加 {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// 定义一个新的节点
ListNode res=new ListNode(0);
ListNode pivot=res;
// 定义进位数不是0就是1
int carry=0;
// 他们两个相加的值
int val=0;
// 通过while循环遍历,直到l1或l2都为空
while(l1!=null||l2!=null) {
// 如果l1为空,那么只遍历l2
if (l1==null) {
if (carry==1) {
val=l2.val+1;
carry=0;
}else {
val=l2.val;
}
// 如果val大于等于10,说明进制
if (val>=10) {
pivot.next=new ListNode(val%10);
carry=1;
}else {
pivot.next=new ListNode(val);
}
pivot=pivot.next;
l2=l2.next;
continue;
}
// 如果l2为空,那么只遍历l1
if (l2==null) {
if (carry==1) {
val=l1.val+1;
carry=0;
}else {
val=l1.val;
}
// 如果val大于等于10,说明进制
if (val>=10) {
pivot.next=new ListNode(val%10);
carry=1;
}else {
pivot.next=new ListNode(val);
}
pivot=pivot.next;
l1=l1.next;
continue;
}
// 如果两个都不为空,就相加
// val=l1.val+l2.val;
// 然后判断carry是否是1,是1就加1,和val是否大于10,大于就%10
if (carry==1) {
val=l1.val+l2.val+1;
carry=0;
}else {
val=l1.val+l2.val;
}
// 如果val大于等于10,说明进制
if (val>=10) {
pivot.next=new ListNode(val%10);
carry=1;
}else {
pivot.next=new ListNode(val);
}
// 在往下移
pivot=pivot.next;
l1=l1.next;
l2=l2.next;
}
if (carry==1) {
pivot.next=new ListNode(1);
}
return res;
}
}
转载说明:跟我说明,务必注明来源,附带本人博客连接。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)