难度中等4789收藏分享切换为英文关注反馈
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
通过次数524,627提交次数1,377,537
package com.shengxi.leetcode.editor.cn;
//给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
//
// 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
//
// 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
//
// 示例:
//
// 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
//输出:7 -> 0 -> 8
//原因:342 + 465 = 807
//
// Related Topics 链表 数学
// 👍 4786 👎 0
public class AddTwoNumbers {
public static void main(String[] args) {
Solution solution = new AddTwoNumbers().new Solution();
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode tmp = head;
int tens = 0;
while (l1 != null || l2 != null) {
int tmpValue = 0;
//判断是否为空
tmpValue += l1 == null ? 0 : l1.val;
tmpValue += l2 == null ? 0 : l2.val;
//直接累加
tmpValue += tens;
//获取十位数
tens = tmpValue / 10;
//取余实现个位数获取
tmpValue %= 10;
//生成子结点
tmp.next = new ListNode(tmpValue);
tmp = tmp.next;
//判断是否为空
l1 = next(l1);
l2 = next(l2);
}
//避免最高位丢失
if (tens > 0) {
tmp.next = new ListNode(tens);
}
return head.next;
}
/**
* 判断是否为空,不为空进入子结点
*/
private ListNode next(ListNode l) {
if (l != null) {
return l.next;
}
return null;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}