Leetcode刷题100天—2. 两数相加( 链表)—day60
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—2. 两数相加( 链表)—day60相关的知识,希望对你有一定的参考价值。
前言:
作者:神的孩子在歌唱
大家好,我叫智
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;
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于Leetcode刷题100天—2. 两数相加( 链表)—day60的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—167. 两数之和 II - 输入有序数组(双指针)—day20
Leetcode刷题100天—167. 两数之和 II - 输入有序数组(双指针)—day20